(hashtagNames.map(x => normalizeForSearch(x)));
- const dom = parse5.parseFragment(html);
+ const doc = htmlParser.parse(`${html}
`);
let text = '';
- for (const n of dom.childNodes) {
+ for (const n of doc.childNodes) {
analyze(n);
}
return text.trim();
- function getText(node: Node): string {
- if (treeAdapter.isTextNode(node)) return node.value;
- if (!treeAdapter.isElementNode(node)) return '';
- if (node.nodeName === 'br') return '\n';
+ function getText(node: htmlParser.Node): string {
+ if (node instanceof htmlParser.TextNode) return node.textContent;
+ if (!(node instanceof htmlParser.HTMLElement)) return '';
+ if (node.tagName === 'BR') return '\n';
- if (node.childNodes) {
+ if (node.childNodes != null) {
return node.childNodes.map(n => getText(n)).join('');
}
return '';
}
- function appendChildren(childNodes: ChildNode[]): void {
- if (childNodes) {
+ function analyzeChildren(childNodes: htmlParser.Node[] | null): void {
+ if (childNodes != null) {
for (const n of childNodes) {
analyze(n);
}
}
}
- function analyze(node: Node) {
- if (treeAdapter.isTextNode(node)) {
- text += node.value;
+ function analyze(node: htmlParser.Node) {
+ if (node instanceof htmlParser.TextNode) {
+ text += node.textContent;
return;
}
// Skip comment or document type node
- if (!treeAdapter.isElementNode(node)) {
+ if (!(node instanceof htmlParser.HTMLElement)) {
return;
}
- switch (node.nodeName) {
- case 'br': {
+ switch (node.tagName) {
+ case 'BR': {
text += '\n';
break;
}
- case 'a': {
+ case 'A': {
const txt = getText(node);
- const rel = node.attrs.find(x => x.name === 'rel');
- const href = node.attrs.find(x => x.name === 'href');
+ const rel = node.attributes.rel;
+ const href = node.attributes.href;
// ハッシュタグ
- if (normalizedHashtagNames && href && normalizedHashtagNames.has(normalizeForSearch(txt))) {
+ if (normalizedHashtagNames && href != null && normalizedHashtagNames.has(normalizeForSearch(txt))) {
text += txt;
// メンション
- } else if (txt.startsWith('@') && !(rel && rel.value.startsWith('me '))) {
+ } else if (txt.startsWith('@') && !(rel != null && rel.startsWith('me '))) {
const part = txt.split('@');
if (part.length === 2 && href) {
//#region ホスト名部分が省略されているので復元する
- const acct = `${txt}@${(new URL(href.value)).hostname}`;
+ const acct = `${txt}@${(new URL(href)).hostname}`;
text += acct;
//#endregion
} else if (part.length === 3) {
@@ -116,17 +109,17 @@ export class MfmService {
if (!href) {
return txt;
}
- if (!txt || txt === href.value) { // #6383: Missing text node
- if (href.value.match(urlRegexFull)) {
- return href.value;
+ if (!txt || txt === href) { // #6383: Missing text node
+ if (href.match(urlRegexFull)) {
+ return href;
} else {
- return `<${href.value}>`;
+ return `<${href}>`;
}
}
- if (href.value.match(urlRegex) && !href.value.match(urlRegexFull)) {
- return `[${txt}](<${href.value}>)`; // #6846
+ if (href.match(urlRegex) && !href.match(urlRegexFull)) {
+ return `[${txt}](<${href}>)`; // #6846
} else {
- return `[${txt}](${href.value})`;
+ return `[${txt}](${href})`;
}
};
@@ -135,60 +128,64 @@ export class MfmService {
break;
}
- case 'h1': {
+ case 'H1': {
text += '【';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
text += '】\n';
break;
}
- case 'b':
- case 'strong': {
+ case 'B':
+ case 'STRONG': {
text += '**';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
text += '**';
break;
}
- case 'small': {
+ case 'SMALL': {
text += '';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
text += ' ';
break;
}
- case 's':
- case 'del': {
+ case 'S':
+ case 'DEL': {
text += '~~';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
text += '~~';
break;
}
- case 'i':
- case 'em': {
+ case 'I':
+ case 'EM': {
text += '';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
text += ' ';
break;
}
- case 'ruby': {
+ case 'RUBY': {
let ruby: [string, string][] = [];
for (const child of node.childNodes) {
- if (child.nodeName === 'rp') {
+ if ((child instanceof htmlParser.TextNode) && !/\s|\[|\]/.test(child.textContent)) {
+ ruby.push([child.textContent, '']);
continue;
}
- if (treeAdapter.isTextNode(child) && !/\s|\[|\]/.test(child.value)) {
- ruby.push([child.value, '']);
+
+ if (!(child instanceof htmlParser.HTMLElement)) continue;
+
+ if (child.tagName === 'RP') {
continue;
}
- if (child.nodeName === 'rt' && ruby.length > 0) {
+
+ if (child.tagName === 'RT' && ruby.length > 0) {
const rt = getText(child);
if (/\s|\[|\]/.test(rt)) {
// If any space is included in rt, it is treated as a normal text
ruby = [];
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
break;
} else {
ruby.at(-1)![1] = rt;
@@ -197,7 +194,7 @@ export class MfmService {
}
// If any other element is included in ruby, it is treated as a normal text
ruby = [];
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
break;
}
for (const [base, rt] of ruby) {
@@ -207,26 +204,30 @@ export class MfmService {
}
// block code ()
- case 'pre': {
- if (node.childNodes.length === 1 && node.childNodes[0].nodeName === 'code') {
+ case 'PRE': {
+ if (node.childNodes.length === 1 && (node.childNodes[0] instanceof htmlParser.HTMLElement) && node.childNodes[0].tagName === 'CODE') {
text += '\n```\n';
text += getText(node.childNodes[0]);
text += '\n```\n';
+ } else if (node.childNodes.length === 1 && (node.childNodes[0] instanceof htmlParser.TextNode) && node.childNodes[0].textContent.startsWith('') && node.childNodes[0].textContent.endsWith('')) {
+ text += '\n```\n';
+ text += node.childNodes[0].textContent.slice(6, -7);
+ text += '\n```\n';
} else {
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
}
break;
}
// inline code ()
- case 'code': {
+ case 'CODE': {
text += '`';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
text += '`';
break;
}
- case 'blockquote': {
+ case 'BLOCKQUOTE': {
const t = getText(node);
if (t) {
text += '\n> ';
@@ -235,33 +236,33 @@ export class MfmService {
break;
}
- case 'p':
- case 'h2':
- case 'h3':
- case 'h4':
- case 'h5':
- case 'h6': {
+ case 'P':
+ case 'H2':
+ case 'H3':
+ case 'H4':
+ case 'H5':
+ case 'H6': {
text += '\n\n';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
break;
}
// other block elements
- case 'div':
- case 'header':
- case 'footer':
- case 'article':
- case 'li':
- case 'dt':
- case 'dd': {
+ case 'DIV':
+ case 'HEADER':
+ case 'FOOTER':
+ case 'ARTICLE':
+ case 'LI':
+ case 'DT':
+ case 'DD': {
text += '\n';
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
break;
}
default: // includes inline elements
{
- appendChildren(node.childNodes);
+ analyzeChildren(node.childNodes);
break;
}
}
@@ -269,52 +270,35 @@ export class MfmService {
}
@bindThis
- public toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMentionedRemoteUsers = [], additionalAppenders: Appender[] = []) {
+ public toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMentionedRemoteUsers = [], extraHtml: string | null = null) {
if (nodes == null) {
return null;
}
- const { happyDOM, window } = new Window();
-
- const doc = window.document;
-
- const body = doc.createElement('p');
-
- function appendChildren(children: mfm.MfmNode[], targetElement: any): void {
- if (children) {
- for (const child of children.map(x => (handlers as any)[x.type](x))) targetElement.appendChild(child);
- }
+ function toHtml(children?: mfm.MfmNode[]): string {
+ if (children == null) return '';
+ return children.map(x => handlers[x.type](x)).join('');
}
function fnDefault(node: mfm.MfmFn) {
- const el = doc.createElement('i');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)} `;
}
- const handlers: { [K in mfm.MfmNode['type']]: (node: mfm.NodeType) => any } = {
+ const handlers = {
bold: (node) => {
- const el = doc.createElement('b');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)} `;
},
small: (node) => {
- const el = doc.createElement('small');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)} `;
},
strike: (node) => {
- const el = doc.createElement('del');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)}`;
},
italic: (node) => {
- const el = doc.createElement('i');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)} `;
},
fn: (node) => {
@@ -323,10 +307,7 @@ export class MfmService {
const text = node.children[0].type === 'text' ? node.children[0].props.text : '';
try {
const date = new Date(parseInt(text, 10) * 1000);
- const el = doc.createElement('time');
- el.setAttribute('datetime', date.toISOString());
- el.textContent = date.toISOString();
- return el;
+ return `${escapeHtml(date.toISOString())} `;
} catch (err) {
return fnDefault(node);
}
@@ -336,21 +317,9 @@ export class MfmService {
if (node.children.length === 1) {
const child = node.children[0];
const text = child.type === 'text' ? child.props.text : '';
- const rubyEl = doc.createElement('ruby');
- const rtEl = doc.createElement('rt');
- // ruby未対応のHTMLサニタイザーを通したときにルビが「劉備(りゅうび)」となるようにする
- const rpStartEl = doc.createElement('rp');
- rpStartEl.appendChild(doc.createTextNode('('));
- const rpEndEl = doc.createElement('rp');
- rpEndEl.appendChild(doc.createTextNode(')'));
-
- rubyEl.appendChild(doc.createTextNode(text.split(' ')[0]));
- rtEl.appendChild(doc.createTextNode(text.split(' ')[1]));
- rubyEl.appendChild(rpStartEl);
- rubyEl.appendChild(rtEl);
- rubyEl.appendChild(rpEndEl);
- return rubyEl;
+ // ruby未対応のHTMLサニタイザーを通したときにルビが「対象テキスト(ルビテキスト)」にフォールバックするようにする
+ return `${escapeHtml(text.split(' ')[0])}( ${escapeHtml(text.split(' ')[1])} ) `;
} else {
const rt = node.children.at(-1);
@@ -359,21 +328,9 @@ export class MfmService {
}
const text = rt.type === 'text' ? rt.props.text : '';
- const rubyEl = doc.createElement('ruby');
- const rtEl = doc.createElement('rt');
- // ruby未対応のHTMLサニタイザーを通したときにルビが「劉備(りゅうび)」となるようにする
- const rpStartEl = doc.createElement('rp');
- rpStartEl.appendChild(doc.createTextNode('('));
- const rpEndEl = doc.createElement('rp');
- rpEndEl.appendChild(doc.createTextNode(')'));
-
- appendChildren(node.children.slice(0, node.children.length - 1), rubyEl);
- rtEl.appendChild(doc.createTextNode(text.trim()));
- rubyEl.appendChild(rpStartEl);
- rubyEl.appendChild(rtEl);
- rubyEl.appendChild(rpEndEl);
- return rubyEl;
+ // ruby未対応のHTMLサニタイザーを通したときにルビが「対象テキスト(ルビテキスト)」にフォールバックするようにする
+ return `${toHtml(node.children.slice(0, node.children.length - 1))}( ${escapeHtml(text.trim())} ) `;
}
}
@@ -384,125 +341,98 @@ export class MfmService {
},
blockCode: (node) => {
- const pre = doc.createElement('pre');
- const inner = doc.createElement('code');
- inner.textContent = node.props.code;
- pre.appendChild(inner);
- return pre;
+ return `${escapeHtml(node.props.code)} `;
},
center: (node) => {
- const el = doc.createElement('div');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)}
`;
},
emojiCode: (node) => {
- return doc.createTextNode(`\u200B:${node.props.name}:\u200B`);
+ return `\u200B:${escapeHtml(node.props.name)}:\u200B`;
},
unicodeEmoji: (node) => {
- return doc.createTextNode(node.props.emoji);
+ return node.props.emoji;
},
hashtag: (node) => {
- const a = doc.createElement('a');
- a.setAttribute('href', `${this.config.url}/tags/${node.props.hashtag}`);
- a.textContent = `#${node.props.hashtag}`;
- a.setAttribute('rel', 'tag');
- return a;
+ return `#${escapeHtml(node.props.hashtag)} `;
},
inlineCode: (node) => {
- const el = doc.createElement('code');
- el.textContent = node.props.code;
- return el;
+ return `${escapeHtml(node.props.code)}`;
},
mathInline: (node) => {
- const el = doc.createElement('code');
- el.textContent = node.props.formula;
- return el;
+ return `${escapeHtml(node.props.formula)}`;
},
mathBlock: (node) => {
- const el = doc.createElement('code');
- el.textContent = node.props.formula;
- return el;
+ return `${escapeHtml(node.props.formula)} `;
},
link: (node) => {
- const a = doc.createElement('a');
- a.setAttribute('href', node.props.url);
- appendChildren(node.children, a);
- return a;
+ try {
+ const url = new URL(node.props.url);
+ return `${toHtml(node.children)} `;
+ } catch (err) {
+ return `[${toHtml(node.children)}](${escapeHtml(node.props.url)})`;
+ }
},
mention: (node) => {
- const a = doc.createElement('a');
const { username, host, acct } = node.props;
const remoteUserInfo = mentionedRemoteUsers.find(remoteUser => remoteUser.username.toLowerCase() === username.toLowerCase() && remoteUser.host?.toLowerCase() === host?.toLowerCase());
- a.setAttribute('href', remoteUserInfo
+ const href = remoteUserInfo
? (remoteUserInfo.url ? remoteUserInfo.url : remoteUserInfo.uri)
- : `${this.config.url}/${acct.endsWith(`@${this.config.url}`) ? acct.substring(0, acct.length - this.config.url.length - 1) : acct}`);
- a.className = 'u-url mention';
- a.textContent = acct;
- return a;
+ : `${this.config.url}/${acct.endsWith(`@${this.config.url}`) ? acct.substring(0, acct.length - this.config.url.length - 1) : acct}`;
+ try {
+ const url = new URL(href);
+ return `${escapeHtml(acct)} `;
+ } catch (err) {
+ return escapeHtml(acct);
+ }
},
quote: (node) => {
- const el = doc.createElement('blockquote');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)} `;
},
text: (node) => {
if (!node.props.text.match(/[\r\n]/)) {
- return doc.createTextNode(node.props.text);
+ return escapeHtml(node.props.text);
}
- const el = doc.createElement('span');
- const nodes = node.props.text.split(/\r\n|\r|\n/).map(x => doc.createTextNode(x));
+ let html = '';
- for (const x of intersperse('br', nodes)) {
- el.appendChild(x === 'br' ? doc.createElement('br') : x);
+ const lines = node.props.text.split(/\r\n|\r|\n/).map(x => escapeHtml(x));
+
+ for (const x of intersperse('br', lines)) {
+ html += x === 'br' ? ' ' : x;
}
- return el;
+ return html;
},
url: (node) => {
- const a = doc.createElement('a');
- a.setAttribute('href', node.props.url);
- a.textContent = node.props.url;
- return a;
+ try {
+ const url = new URL(node.props.url);
+ return `${escapeHtml(node.props.url)} `;
+ } catch (err) {
+ return escapeHtml(node.props.url);
+ }
},
search: (node) => {
- const a = doc.createElement('a');
- a.setAttribute('href', `https://www.google.com/search?q=${node.props.query}`);
- a.textContent = node.props.content;
- return a;
+ return `${escapeHtml(node.props.content)} `;
},
plain: (node) => {
- const el = doc.createElement('span');
- appendChildren(node.children, el);
- return el;
+ return `${toHtml(node.children)} `;
},
- };
+ } satisfies { [K in mfm.MfmNode['type']]: (node: mfm.NodeType) => string } as { [K in mfm.MfmNode['type']]: (node: mfm.MfmNode) => string };
- appendChildren(nodes, body);
-
- for (const additionalAppender of additionalAppenders) {
- additionalAppender(doc, body);
- }
-
- // Remove the unnecessary namespace
- const serialized = new XMLSerializer().serializeToString(body).replace(/^\s*/, '
');
-
- happyDOM.close().catch(err => {});
-
- return serialized;
+ return `${toHtml(nodes)}${extraHtml ?? ''}`;
}
}
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index b6acf4c5fb..748f2cbad9 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -604,6 +604,7 @@ export class NoteCreateService implements OnApplicationShutdown {
replyUserHost: data.reply ? data.reply.userHost : null,
renoteUserId: data.renote ? data.renote.userId : null,
renoteUserHost: data.renote ? data.renote.userHost : null,
+ renoteChannelId: data.renote ? data.renote.channelId : null,
userHost: user.host,
});
diff --git a/packages/backend/src/core/NotificationService.ts b/packages/backend/src/core/NotificationService.ts
index eeade4569b..310ffec7ce 100644
--- a/packages/backend/src/core/NotificationService.ts
+++ b/packages/backend/src/core/NotificationService.ts
@@ -202,7 +202,7 @@ export class NotificationService implements OnApplicationShutdown {
}
// TODO
- //const locales = await import('../../../../locales/index.js');
+ //const locales = await import('i18n');
// TODO: locale ファイルをクライアント用とサーバー用で分けたい
@@ -271,7 +271,7 @@ export class NotificationService implements OnApplicationShutdown {
let untilTime = untilId ? this.toXListId(untilId) : null;
let notifications: MiNotification[];
- for (;;) {
+ for (; ;) {
let notificationsRes: [id: string, fields: string[]][];
// sinceidのみの場合は古い順、そうでない場合は新しい順。 QueryService.makePaginationQueryも参照
diff --git a/packages/backend/src/core/PageService.ts b/packages/backend/src/core/PageService.ts
index 7f0e5c7ccc..4abeb30fce 100644
--- a/packages/backend/src/core/PageService.ts
+++ b/packages/backend/src/core/PageService.ts
@@ -29,7 +29,7 @@ export interface PageBody {
variables: Array>;
script: string;
eyeCatchingImage?: MiDriveFile | null;
- font: string;
+ font: 'serif' | 'sans-serif';
alignCenter: boolean;
hideTitleWhenPinned: boolean;
}
@@ -141,7 +141,7 @@ export class PageService {
eyeCatchingImageId: body.eyeCatchingImage === undefined ? undefined : (body.eyeCatchingImage?.id ?? null),
});
- console.log("page.content", page.content);
+ console.log('page.content', page.content);
if (body.content != null) {
const beforeReferencedNotes = this.collectReferencedNotes(page.content);
diff --git a/packages/backend/src/core/UtilityService.ts b/packages/backend/src/core/UtilityService.ts
index 67ec6cc7b0..21ea9b9983 100644
--- a/packages/backend/src/core/UtilityService.ts
+++ b/packages/backend/src/core/UtilityService.ts
@@ -133,6 +133,7 @@ export class UtilityService {
@bindThis
public isFederationAllowedHost(host: string): boolean {
+ if (this.isSelfHost(host)) return true;
if (this.meta.federation === 'none') return false;
if (this.meta.federation === 'specified' && !this.meta.federationHosts.some(x => `.${host.toLowerCase()}`.endsWith(`.${x}`))) return false;
if (this.isBlockedHost(this.meta.blockedHosts, host)) return false;
diff --git a/packages/backend/src/core/WebAuthnService.ts b/packages/backend/src/core/WebAuthnService.ts
index 372e1e2ab7..31c8d67c60 100644
--- a/packages/backend/src/core/WebAuthnService.ts
+++ b/packages/backend/src/core/WebAuthnService.ts
@@ -66,7 +66,6 @@ export class WebAuthnService {
userID: isoUint8Array.fromUTF8String(userId),
userName: userName,
userDisplayName: userDisplayName,
- attestationType: 'indirect',
excludeCredentials: keys.map(key => (<{ id: string; transports?: AuthenticatorTransportFuture[]; }>{
id: key.id,
transports: key.transports ?? undefined,
diff --git a/packages/backend/src/core/WebhookTestService.ts b/packages/backend/src/core/WebhookTestService.ts
index 6714bda9a9..b112912b1b 100644
--- a/packages/backend/src/core/WebhookTestService.ts
+++ b/packages/backend/src/core/WebhookTestService.ts
@@ -106,6 +106,7 @@ function generateDummyNote(override?: Partial): MiNote {
replyUserHost: null,
renoteUserId: null,
renoteUserHost: null,
+ renoteChannelId: null,
...override,
};
}
diff --git a/packages/backend/src/core/activitypub/ApInboxService.ts b/packages/backend/src/core/activitypub/ApInboxService.ts
index e88f60b806..81637580e3 100644
--- a/packages/backend/src/core/activitypub/ApInboxService.ts
+++ b/packages/backend/src/core/activitypub/ApInboxService.ts
@@ -5,6 +5,7 @@
import { Inject, Injectable } from '@nestjs/common';
import { In } from 'typeorm';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { UserFollowingService } from '@/core/UserFollowingService.js';
@@ -14,8 +15,8 @@ import { NotePiningService } from '@/core/NotePiningService.js';
import { UserBlockingService } from '@/core/UserBlockingService.js';
import { NoteDeleteService } from '@/core/NoteDeleteService.js';
import { NoteCreateService } from '@/core/NoteCreateService.js';
+import { acquireApObjectLock } from '@/misc/distributed-lock.js';
import { concat, toArray, toSingle, unique } from '@/misc/prelude/array.js';
-import { AppLockService } from '@/core/AppLockService.js';
import type Logger from '@/logger.js';
import { IdService } from '@/core/IdService.js';
import { StatusError } from '@/misc/status-error.js';
@@ -48,8 +49,8 @@ export class ApInboxService {
@Inject(DI.config)
private config: Config,
- @Inject(DI.meta)
- private meta: MiMeta,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@@ -76,7 +77,6 @@ export class ApInboxService {
private userBlockingService: UserBlockingService,
private noteCreateService: NoteCreateService,
private noteDeleteService: NoteDeleteService,
- private appLockService: AppLockService,
private apResolverService: ApResolverService,
private apDbResolverService: ApDbResolverService,
private apLoggerService: ApLoggerService,
@@ -311,7 +311,7 @@ export class ApInboxService {
// アナウンス先が許可されているかチェック
if (!this.utilityService.isFederationAllowedUri(uri)) return;
- const unlock = await this.appLockService.getApLock(uri);
+ const unlock = await acquireApObjectLock(this.redisClient, uri);
try {
// 既に同じURIを持つものが登録されていないかチェック
@@ -438,7 +438,7 @@ export class ApInboxService {
}
}
- const unlock = await this.appLockService.getApLock(uri);
+ const unlock = await acquireApObjectLock(this.redisClient, uri);
try {
const exist = await this.apNoteService.fetchNote(note);
@@ -522,7 +522,7 @@ export class ApInboxService {
private async deleteNote(actor: MiRemoteUser, uri: string): Promise {
this.logger.info(`Deleting the Note: ${uri}`);
- const unlock = await this.appLockService.getApLock(uri);
+ const unlock = await acquireApObjectLock(this.redisClient, uri);
try {
const note = await this.apDbResolverService.getNoteFromApId(uri);
diff --git a/packages/backend/src/core/activitypub/ApMfmService.ts b/packages/backend/src/core/activitypub/ApMfmService.ts
index f4c07e472c..a928ed5ccf 100644
--- a/packages/backend/src/core/activitypub/ApMfmService.ts
+++ b/packages/backend/src/core/activitypub/ApMfmService.ts
@@ -5,7 +5,7 @@
import { Injectable } from '@nestjs/common';
import * as mfm from 'mfm-js';
-import { MfmService, Appender } from '@/core/MfmService.js';
+import { MfmService } from '@/core/MfmService.js';
import type { MiNote } from '@/models/Note.js';
import { bindThis } from '@/decorators.js';
import { extractApHashtagObjects } from './models/tag.js';
@@ -25,17 +25,17 @@ export class ApMfmService {
}
@bindThis
- public getNoteHtml(note: Pick, additionalAppender: Appender[] = []) {
+ public getNoteHtml(note: Pick, extraHtml: string | null = null) {
let noMisskeyContent = false;
const srcMfm = (note.text ?? '');
const parsed = mfm.parse(srcMfm);
- if (!additionalAppender.length && parsed.every(n => ['text', 'unicodeEmoji', 'emojiCode', 'mention', 'hashtag', 'url'].includes(n.type))) {
+ if (extraHtml == null && parsed.every(n => ['text', 'unicodeEmoji', 'emojiCode', 'mention', 'hashtag', 'url'].includes(n.type))) {
noMisskeyContent = true;
}
- const content = this.mfmService.toHtml(parsed, JSON.parse(note.mentionedRemoteUsers), additionalAppender);
+ const content = this.mfmService.toHtml(parsed, JSON.parse(note.mentionedRemoteUsers), extraHtml);
return {
content,
diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts
index 55521d6e3a..4570977c5d 100644
--- a/packages/backend/src/core/activitypub/ApRendererService.ts
+++ b/packages/backend/src/core/activitypub/ApRendererService.ts
@@ -19,7 +19,7 @@ import type { MiEmoji } from '@/models/Emoji.js';
import type { MiPoll } from '@/models/Poll.js';
import type { MiPollVote } from '@/models/PollVote.js';
import { UserKeypairService } from '@/core/UserKeypairService.js';
-import { MfmService, type Appender } from '@/core/MfmService.js';
+import { MfmService } from '@/core/MfmService.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
import type { MiUserKeypair } from '@/models/UserKeypair.js';
@@ -28,6 +28,7 @@ import { bindThis } from '@/decorators.js';
import { CustomEmojiService } from '@/core/CustomEmojiService.js';
import { IdService } from '@/core/IdService.js';
import { UtilityService } from '@/core/UtilityService.js';
+import { escapeHtml } from '@/misc/escape-html.js';
import { JsonLdService } from './JsonLdService.js';
import { ApMfmService } from './ApMfmService.js';
import { CONTEXT } from './misc/contexts.js';
@@ -384,7 +385,7 @@ export class ApRendererService {
inReplyTo = null;
}
- let quote;
+ let quote: string | undefined;
if (note.renoteId) {
const renote = await this.notesRepository.findOneBy({ id: note.renoteId });
@@ -430,29 +431,18 @@ export class ApRendererService {
poll = await this.pollsRepository.findOneBy({ noteId: note.id });
}
- const apAppend: Appender[] = [];
+ let extraHtml: string | null = null;
- if (quote) {
+ if (quote != null) {
// Append quote link as `RE: ... `
- // the claas name `quote-inline` is used in non-misskey clients for styling quote notes.
+ // the class name `quote-inline` is used in non-misskey clients for styling quote notes.
// For compatibility, the span part should be kept as possible.
- apAppend.push((doc, body) => {
- body.appendChild(doc.createElement('br'));
- body.appendChild(doc.createElement('br'));
- const span = doc.createElement('span');
- span.className = 'quote-inline';
- span.appendChild(doc.createTextNode('RE: '));
- const link = doc.createElement('a');
- link.setAttribute('href', quote);
- link.textContent = quote;
- span.appendChild(link);
- body.appendChild(span);
- });
+ extraHtml = `RE: ${escapeHtml(quote)} `;
}
const summary = note.cw === '' ? String.fromCharCode(0x200B) : note.cw;
- const { content, noMisskeyContent } = this.apMfmService.getNoteHtml(note, apAppend);
+ const { content, noMisskeyContent } = this.apMfmService.getNoteHtml(note, extraHtml);
const emojis = await this.getEmojis(note.emojis);
const apemojis = emojis.filter(emoji => !emoji.localOnly).map(emoji => this.renderEmoji(emoji));
diff --git a/packages/backend/src/core/activitypub/ApRequestService.ts b/packages/backend/src/core/activitypub/ApRequestService.ts
index 61d328ccac..49298a1d22 100644
--- a/packages/backend/src/core/activitypub/ApRequestService.ts
+++ b/packages/backend/src/core/activitypub/ApRequestService.ts
@@ -6,7 +6,7 @@
import * as crypto from 'node:crypto';
import { URL } from 'node:url';
import { Inject, Injectable } from '@nestjs/common';
-import { Window } from 'happy-dom';
+import * as htmlParser from 'node-html-parser';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import type { MiUser } from '@/models/User.js';
@@ -215,29 +215,9 @@ export class ApRequestService {
_followAlternate === true
) {
const html = await res.text();
- const { window, happyDOM } = new Window({
- settings: {
- disableJavaScriptEvaluation: true,
- disableJavaScriptFileLoading: true,
- disableCSSFileLoading: true,
- disableComputedStyleRendering: true,
- handleDisabledFileLoadingAsSuccess: true,
- navigation: {
- disableMainFrameNavigation: true,
- disableChildFrameNavigation: true,
- disableChildPageNavigation: true,
- disableFallbackToSetURL: true,
- },
- timer: {
- maxTimeout: 0,
- maxIntervalTime: 0,
- maxIntervalIterations: 0,
- },
- },
- });
- const document = window.document;
+
try {
- document.documentElement.innerHTML = html;
+ const document = htmlParser.parse(html);
const alternate = document.querySelector('head > link[rel="alternate"][type="application/activity+json"]');
if (alternate) {
@@ -248,8 +228,6 @@ export class ApRequestService {
}
} catch (e) {
// something went wrong parsing the HTML, ignore the whole thing
- } finally {
- happyDOM.close().catch(err => {});
}
}
//#endregion
diff --git a/packages/backend/src/core/activitypub/models/ApNoteService.ts b/packages/backend/src/core/activitypub/models/ApNoteService.ts
index 8abacd293f..214d32f67f 100644
--- a/packages/backend/src/core/activitypub/models/ApNoteService.ts
+++ b/packages/backend/src/core/activitypub/models/ApNoteService.ts
@@ -5,14 +5,15 @@
import { forwardRef, Inject, Injectable } from '@nestjs/common';
import { In } from 'typeorm';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import type { PollsRepository, EmojisRepository, MiMeta } from '@/models/_.js';
import type { Config } from '@/config.js';
import type { MiRemoteUser } from '@/models/User.js';
import type { MiNote } from '@/models/Note.js';
+import { acquireApObjectLock } from '@/misc/distributed-lock.js';
import { toArray, toSingle, unique } from '@/misc/prelude/array.js';
import type { MiEmoji } from '@/models/Emoji.js';
-import { AppLockService } from '@/core/AppLockService.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import { NoteCreateService } from '@/core/NoteCreateService.js';
import type Logger from '@/logger.js';
@@ -48,6 +49,9 @@ export class ApNoteService {
@Inject(DI.meta)
private meta: MiMeta,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.pollsRepository)
private pollsRepository: PollsRepository,
@@ -67,7 +71,6 @@ export class ApNoteService {
private apMentionService: ApMentionService,
private apImageService: ApImageService,
private apQuestionService: ApQuestionService,
- private appLockService: AppLockService,
private pollService: PollService,
private noteCreateService: NoteCreateService,
private apDbResolverService: ApDbResolverService,
@@ -354,7 +357,7 @@ export class ApNoteService {
throw new StatusError('blocked host', 451);
}
- const unlock = await this.appLockService.getApLock(uri);
+ const unlock = await acquireApObjectLock(this.redisClient, uri);
try {
//#region このサーバーに既に登録されていたらそれを返す
diff --git a/packages/backend/src/core/chart/charts/active-users.ts b/packages/backend/src/core/chart/charts/active-users.ts
index 05905f3782..7b9840af87 100644
--- a/packages/backend/src/core/chart/charts/active-users.ts
+++ b/packages/backend/src/core/chart/charts/active-users.ts
@@ -5,11 +5,12 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
-import { AppLockService } from '@/core/AppLockService.js';
+import * as Redis from 'ioredis';
import type { MiUser } from '@/models/User.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
import { IdService } from '@/core/IdService.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/active-users.js';
@@ -28,11 +29,13 @@ export default class ActiveUsersChart extends Chart { // eslint-d
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
private chartLoggerService: ChartLoggerService,
private idService: IdService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/ap-request.ts b/packages/backend/src/core/chart/charts/ap-request.ts
index 04e771a95b..ed790de7b5 100644
--- a/packages/backend/src/core/chart/charts/ap-request.ts
+++ b/packages/backend/src/core/chart/charts/ap-request.ts
@@ -5,9 +5,10 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
-import { AppLockService } from '@/core/AppLockService.js';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/ap-request.js';
@@ -22,10 +23,12 @@ export default class ApRequestChart extends Chart { // eslint-dis
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/drive.ts b/packages/backend/src/core/chart/charts/drive.ts
index 613e074a9f..782873809a 100644
--- a/packages/backend/src/core/chart/charts/drive.ts
+++ b/packages/backend/src/core/chart/charts/drive.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { MiDriveFile } from '@/models/DriveFile.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/drive.js';
@@ -23,10 +24,12 @@ export default class DriveChart extends Chart { // eslint-disable
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/federation.ts b/packages/backend/src/core/chart/charts/federation.ts
index c9b43cc66d..b7a7f640b8 100644
--- a/packages/backend/src/core/chart/charts/federation.ts
+++ b/packages/backend/src/core/chart/charts/federation.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { FollowingsRepository, InstancesRepository, MiMeta } from '@/models/_.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/federation.js';
@@ -26,16 +27,18 @@ export default class FederationChart extends Chart { // eslint-di
@Inject(DI.meta)
private meta: MiMeta,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.followingsRepository)
private followingsRepository: FollowingsRepository,
@Inject(DI.instancesRepository)
private instancesRepository: InstancesRepository,
- private appLockService: AppLockService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/instance.ts b/packages/backend/src/core/chart/charts/instance.ts
index 97f3bc6f2b..b1657e0a0b 100644
--- a/packages/backend/src/core/chart/charts/instance.ts
+++ b/packages/backend/src/core/chart/charts/instance.ts
@@ -5,13 +5,14 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { DriveFilesRepository, FollowingsRepository, UsersRepository, NotesRepository } from '@/models/_.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import type { MiNote } from '@/models/Note.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { UtilityService } from '@/core/UtilityService.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/instance.js';
@@ -26,6 +27,9 @@ export default class InstanceChart extends Chart { // eslint-disa
@Inject(DI.db)
private db: DataSource,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@@ -39,10 +43,9 @@ export default class InstanceChart extends Chart { // eslint-disa
private followingsRepository: FollowingsRepository,
private utilityService: UtilityService,
- private appLockService: AppLockService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema, true);
}
protected async tickMajor(group: string): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/notes.ts b/packages/backend/src/core/chart/charts/notes.ts
index f763b5fffa..aa64e2329a 100644
--- a/packages/backend/src/core/chart/charts/notes.ts
+++ b/packages/backend/src/core/chart/charts/notes.ts
@@ -5,11 +5,12 @@
import { Injectable, Inject } from '@nestjs/common';
import { Not, IsNull, DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { NotesRepository } from '@/models/_.js';
import type { MiNote } from '@/models/Note.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/notes.js';
@@ -24,13 +25,15 @@ export default class NotesChart extends Chart { // eslint-disable
@Inject(DI.db)
private db: DataSource,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
- private appLockService: AppLockService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/per-user-drive.ts b/packages/backend/src/core/chart/charts/per-user-drive.ts
index 404964d8b7..f7e92aecea 100644
--- a/packages/backend/src/core/chart/charts/per-user-drive.ts
+++ b/packages/backend/src/core/chart/charts/per-user-drive.ts
@@ -5,12 +5,13 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { DriveFilesRepository } from '@/models/_.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/per-user-drive.js';
@@ -25,14 +26,16 @@ export default class PerUserDriveChart extends Chart { // eslint-
@Inject(DI.db)
private db: DataSource,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.driveFilesRepository)
private driveFilesRepository: DriveFilesRepository,
- private appLockService: AppLockService,
private driveFileEntityService: DriveFileEntityService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema, true);
}
protected async tickMajor(group: string): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/per-user-following.ts b/packages/backend/src/core/chart/charts/per-user-following.ts
index 588ac638de..ea431a5131 100644
--- a/packages/backend/src/core/chart/charts/per-user-following.ts
+++ b/packages/backend/src/core/chart/charts/per-user-following.ts
@@ -5,12 +5,13 @@
import { Injectable, Inject } from '@nestjs/common';
import { Not, IsNull, DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { MiUser } from '@/models/User.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import type { FollowingsRepository } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/per-user-following.js';
@@ -25,14 +26,16 @@ export default class PerUserFollowingChart extends Chart { // esl
@Inject(DI.db)
private db: DataSource,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.followingsRepository)
private followingsRepository: FollowingsRepository,
- private appLockService: AppLockService,
private userEntityService: UserEntityService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema, true);
}
protected async tickMajor(group: string): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/per-user-notes.ts b/packages/backend/src/core/chart/charts/per-user-notes.ts
index e4900772bb..824d60042d 100644
--- a/packages/backend/src/core/chart/charts/per-user-notes.ts
+++ b/packages/backend/src/core/chart/charts/per-user-notes.ts
@@ -5,12 +5,13 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { MiUser } from '@/models/User.js';
import type { MiNote } from '@/models/Note.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import type { NotesRepository } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/per-user-notes.js';
@@ -25,13 +26,15 @@ export default class PerUserNotesChart extends Chart { // eslint-
@Inject(DI.db)
private db: DataSource,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
- private appLockService: AppLockService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema, true);
}
protected async tickMajor(group: string): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/per-user-pv.ts b/packages/backend/src/core/chart/charts/per-user-pv.ts
index 31708fefa8..b3e1b2cea1 100644
--- a/packages/backend/src/core/chart/charts/per-user-pv.ts
+++ b/packages/backend/src/core/chart/charts/per-user-pv.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { MiUser } from '@/models/User.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/per-user-pv.js';
@@ -23,10 +24,12 @@ export default class PerUserPvChart extends Chart { // eslint-dis
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema, true);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/per-user-reactions.ts b/packages/backend/src/core/chart/charts/per-user-reactions.ts
index c29c4d2870..7bc1d9e7fa 100644
--- a/packages/backend/src/core/chart/charts/per-user-reactions.ts
+++ b/packages/backend/src/core/chart/charts/per-user-reactions.ts
@@ -5,12 +5,13 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { MiUser } from '@/models/User.js';
import type { MiNote } from '@/models/Note.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/per-user-reactions.js';
@@ -25,11 +26,13 @@ export default class PerUserReactionsChart extends Chart { // esl
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
private userEntityService: UserEntityService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema, true);
}
protected async tickMajor(group: string): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/test-grouped.ts b/packages/backend/src/core/chart/charts/test-grouped.ts
index 7a2844f4ed..8dd1a5d996 100644
--- a/packages/backend/src/core/chart/charts/test-grouped.ts
+++ b/packages/backend/src/core/chart/charts/test-grouped.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
-import { AppLockService } from '@/core/AppLockService.js';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { name, schema } from './entities/test-grouped.js';
import type { KVs } from '../core.js';
@@ -24,10 +25,12 @@ export default class TestGroupedChart extends Chart { // eslint-d
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
logger: Logger,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), logger, name, schema, true);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), logger, name, schema, true);
}
protected async tickMajor(group: string): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/test-intersection.ts b/packages/backend/src/core/chart/charts/test-intersection.ts
index b8d0556c9f..23b8649cce 100644
--- a/packages/backend/src/core/chart/charts/test-intersection.ts
+++ b/packages/backend/src/core/chart/charts/test-intersection.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
-import { AppLockService } from '@/core/AppLockService.js';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { name, schema } from './entities/test-intersection.js';
import type { KVs } from '../core.js';
@@ -22,10 +23,12 @@ export default class TestIntersectionChart extends Chart { // esl
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
logger: Logger,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/test-unique.ts b/packages/backend/src/core/chart/charts/test-unique.ts
index f94e008059..b84dd419ba 100644
--- a/packages/backend/src/core/chart/charts/test-unique.ts
+++ b/packages/backend/src/core/chart/charts/test-unique.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
-import { AppLockService } from '@/core/AppLockService.js';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { name, schema } from './entities/test-unique.js';
import type { KVs } from '../core.js';
@@ -22,10 +23,12 @@ export default class TestUniqueChart extends Chart { // eslint-di
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
logger: Logger,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/test.ts b/packages/backend/src/core/chart/charts/test.ts
index a90dc8f99b..0e95ce9239 100644
--- a/packages/backend/src/core/chart/charts/test.ts
+++ b/packages/backend/src/core/chart/charts/test.ts
@@ -5,10 +5,11 @@
import { Injectable, Inject } from '@nestjs/common';
import { DataSource } from 'typeorm';
-import { AppLockService } from '@/core/AppLockService.js';
+import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { name, schema } from './entities/test.js';
import type { KVs } from '../core.js';
@@ -24,10 +25,12 @@ export default class TestChart extends Chart { // eslint-disable-
@Inject(DI.db)
private db: DataSource,
- private appLockService: AppLockService,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
logger: Logger,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/chart/charts/users.ts b/packages/backend/src/core/chart/charts/users.ts
index d148fc629b..4471c1df23 100644
--- a/packages/backend/src/core/chart/charts/users.ts
+++ b/packages/backend/src/core/chart/charts/users.ts
@@ -5,12 +5,13 @@
import { Injectable, Inject } from '@nestjs/common';
import { Not, IsNull, DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import type { MiUser } from '@/models/User.js';
-import { AppLockService } from '@/core/AppLockService.js';
import { DI } from '@/di-symbols.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import type { UsersRepository } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
+import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
import Chart from '../core.js';
import { ChartLoggerService } from '../ChartLoggerService.js';
import { name, schema } from './entities/users.js';
@@ -25,14 +26,16 @@ export default class UsersChart extends Chart { // eslint-disable
@Inject(DI.db)
private db: DataSource,
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
- private appLockService: AppLockService,
private userEntityService: UserEntityService,
private chartLoggerService: ChartLoggerService,
) {
- super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
+ super(db, (k) => acquireChartInsertLock(redisClient, k), chartLoggerService.logger, name, schema);
}
protected async tickMajor(): Promise>> {
diff --git a/packages/backend/src/core/entities/ChannelEntityService.ts b/packages/backend/src/core/entities/ChannelEntityService.ts
index 1ba7ca8e57..e26cddd281 100644
--- a/packages/backend/src/core/entities/ChannelEntityService.ts
+++ b/packages/backend/src/core/entities/ChannelEntityService.ts
@@ -4,36 +4,40 @@
*/
import { Inject, Injectable } from '@nestjs/common';
+import { In } from 'typeorm';
import { DI } from '@/di-symbols.js';
-import type { ChannelFavoritesRepository, ChannelFollowingsRepository, ChannelsRepository, DriveFilesRepository, NotesRepository } from '@/models/_.js';
+import type {
+ ChannelFavoritesRepository,
+ ChannelFollowingsRepository, ChannelMutingRepository,
+ ChannelsRepository,
+ DriveFilesRepository,
+ MiDriveFile,
+ MiNote,
+ NotesRepository,
+} from '@/models/_.js';
import type { Packed } from '@/misc/json-schema.js';
-import type { } from '@/models/Blocking.js';
import type { MiUser } from '@/models/User.js';
import type { MiChannel } from '@/models/Channel.js';
import { bindThis } from '@/decorators.js';
import { IdService } from '@/core/IdService.js';
import { DriveFileEntityService } from './DriveFileEntityService.js';
import { NoteEntityService } from './NoteEntityService.js';
-import { In } from 'typeorm';
@Injectable()
export class ChannelEntityService {
constructor(
@Inject(DI.channelsRepository)
private channelsRepository: ChannelsRepository,
-
@Inject(DI.channelFollowingsRepository)
private channelFollowingsRepository: ChannelFollowingsRepository,
-
@Inject(DI.channelFavoritesRepository)
private channelFavoritesRepository: ChannelFavoritesRepository,
-
+ @Inject(DI.channelMutingRepository)
+ private channelMutingRepository: ChannelMutingRepository,
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
-
@Inject(DI.driveFilesRepository)
private driveFilesRepository: DriveFilesRepository,
-
private noteEntityService: NoteEntityService,
private driveFileEntityService: DriveFileEntityService,
private idService: IdService,
@@ -45,31 +49,59 @@ export class ChannelEntityService {
src: MiChannel['id'] | MiChannel,
me?: { id: MiUser['id'] } | null | undefined,
detailed?: boolean,
+ opts?: {
+ bannerFiles?: Map;
+ followings?: Set;
+ favorites?: Set;
+ muting?: Set;
+ pinnedNotes?: Map;
+ },
): Promise> {
const channel = typeof src === 'object' ? src : await this.channelsRepository.findOneByOrFail({ id: src });
- const meId = me ? me.id : null;
- const banner = channel.bannerId ? await this.driveFilesRepository.findOneBy({ id: channel.bannerId }) : null;
+ let bannerFile: MiDriveFile | null = null;
+ if (channel.bannerId) {
+ bannerFile = opts?.bannerFiles?.get(channel.bannerId)
+ ?? await this.driveFilesRepository.findOneByOrFail({ id: channel.bannerId });
+ }
- const isFollowing = meId ? await this.channelFollowingsRepository.exists({
- where: {
- followerId: meId,
- followeeId: channel.id,
- },
- }) : false;
+ let isFollowing = false;
+ let isFavorited = false;
+ let isMuting = false;
+ if (me) {
+ isFollowing = opts?.followings?.has(channel.id) ?? await this.channelFollowingsRepository.exists({
+ where: {
+ followerId: me.id,
+ followeeId: channel.id,
+ },
+ });
- const isFavorited = meId ? await this.channelFavoritesRepository.exists({
- where: {
- userId: meId,
- channelId: channel.id,
- },
- }) : false;
+ isFavorited = opts?.favorites?.has(channel.id) ?? await this.channelFavoritesRepository.exists({
+ where: {
+ userId: me.id,
+ channelId: channel.id,
+ },
+ });
- const pinnedNotes = channel.pinnedNoteIds.length > 0 ? await this.notesRepository.find({
- where: {
- id: In(channel.pinnedNoteIds),
- },
- }) : [];
+ isMuting = opts?.muting?.has(channel.id) ?? await this.channelMutingRepository.exists({
+ where: {
+ userId: me.id,
+ channelId: channel.id,
+ },
+ });
+ }
+
+ const pinnedNotes = Array.of();
+ if (channel.pinnedNoteIds.length > 0) {
+ pinnedNotes.push(
+ ...(
+ opts?.pinnedNotes
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ ? channel.pinnedNoteIds.map(it => opts.pinnedNotes!.get(it)).filter(it => it != null)
+ : await this.notesRepository.findBy({ id: In(channel.pinnedNoteIds) })
+ ),
+ );
+ }
return {
id: channel.id,
@@ -78,7 +110,8 @@ export class ChannelEntityService {
name: channel.name,
description: channel.description,
userId: channel.userId,
- bannerUrl: banner ? this.driveFileEntityService.getPublicUrl(banner) : null,
+ bannerUrl: bannerFile ? this.driveFileEntityService.getPublicUrl(bannerFile) : null,
+ bannerId: channel.bannerId,
pinnedNoteIds: channel.pinnedNoteIds,
color: channel.color,
isArchived: channel.isArchived,
@@ -90,6 +123,7 @@ export class ChannelEntityService {
...(me ? {
isFollowing,
isFavorited,
+ isMuting,
hasUnreadNote: false, // 後方互換性のため
} : {}),
@@ -98,5 +132,72 @@ export class ChannelEntityService {
} : {}),
};
}
+
+ @bindThis
+ public async packMany(
+ src: MiChannel['id'][] | MiChannel[],
+ me?: { id: MiUser['id'] } | null | undefined,
+ detailed?: boolean,
+ ): Promise[]> {
+ // IDのみの要素がある場合、DBからオブジェクトを取得して補う
+ const channels = src.filter(it => typeof it === 'object') as MiChannel[];
+ channels.push(
+ ...(await this.channelsRepository.find({
+ where: {
+ id: In(src.filter(it => typeof it !== 'object') as MiChannel['id'][]),
+ },
+ })),
+ );
+ channels.sort((a, b) => a.id.localeCompare(b.id));
+
+ const bannerFiles = await this.driveFilesRepository
+ .findBy({
+ id: In(channels.map(it => it.bannerId).filter(it => it != null)),
+ })
+ .then(it => new Map(it.map(it => [it.id, it])));
+
+ const followings = me
+ ? await this.channelFollowingsRepository
+ .findBy({
+ followerId: me.id,
+ followeeId: In(channels.map(it => it.id)),
+ })
+ .then(it => new Set(it.map(it => it.followeeId)))
+ : new Set();
+
+ const favorites = me
+ ? await this.channelFavoritesRepository
+ .findBy({
+ userId: me.id,
+ channelId: In(channels.map(it => it.id)),
+ })
+ .then(it => new Set(it.map(it => it.channelId)))
+ : new Set();
+
+ const muting = me
+ ? await this.channelMutingRepository
+ .findBy({
+ userId: me.id,
+ channelId: In(channels.map(it => it.id)),
+ })
+ .then(it => new Set(it.map(it => it.channelId)))
+ : new Set();
+
+ const pinnedNotes = await this.notesRepository
+ .find({
+ where: {
+ id: In(channels.flatMap(it => it.pinnedNoteIds)),
+ },
+ })
+ .then(it => new Map(it.map(it => [it.id, it])));
+
+ return Promise.all(channels.map(it => this.pack(it, me, detailed, {
+ bannerFiles,
+ followings,
+ favorites,
+ muting,
+ pinnedNotes,
+ })));
+ }
}
diff --git a/packages/backend/src/di-symbols.ts b/packages/backend/src/di-symbols.ts
index c915133453..b9ca76233c 100644
--- a/packages/backend/src/di-symbols.ts
+++ b/packages/backend/src/di-symbols.ts
@@ -70,6 +70,7 @@ export const DI = {
channelsRepository: Symbol('channelsRepository'),
channelFollowingsRepository: Symbol('channelFollowingsRepository'),
channelFavoritesRepository: Symbol('channelFavoritesRepository'),
+ channelMutingRepository: Symbol('channelMutingRepository'),
registryItemsRepository: Symbol('registryItemsRepository'),
webhooksRepository: Symbol('webhooksRepository'),
systemWebhooksRepository: Symbol('systemWebhooksRepository'),
diff --git a/packages/backend/src/misc/distributed-lock.ts b/packages/backend/src/misc/distributed-lock.ts
new file mode 100644
index 0000000000..93bd741f62
--- /dev/null
+++ b/packages/backend/src/misc/distributed-lock.ts
@@ -0,0 +1,49 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import * as Redis from 'ioredis';
+
+export async function acquireDistributedLock(
+ redis: Redis.Redis,
+ name: string,
+ timeout: number,
+ maxRetries: number,
+ retryInterval: number,
+): Promise<() => Promise> {
+ const lockKey = `lock:${name}`;
+ const identifier = Math.random().toString(36).slice(2);
+
+ let retries = 0;
+ while (retries < maxRetries) {
+ const result = await redis.set(lockKey, identifier, 'PX', timeout, 'NX');
+ if (result === 'OK') {
+ return async () => {
+ const currentIdentifier = await redis.get(lockKey);
+ if (currentIdentifier === identifier) {
+ await redis.del(lockKey);
+ }
+ };
+ }
+
+ await new Promise(resolve => setTimeout(resolve, retryInterval));
+ retries++;
+ }
+
+ throw new Error(`Failed to acquire lock ${name}`);
+}
+
+export function acquireApObjectLock(
+ redis: Redis.Redis,
+ uri: string,
+): Promise<() => Promise> {
+ return acquireDistributedLock(redis, `ap-object:${uri}`, 30 * 1000, 50, 100);
+}
+
+export function acquireChartInsertLock(
+ redis: Redis.Redis,
+ name: string,
+): Promise<() => Promise> {
+ return acquireDistributedLock(redis, `chart-insert:${name}`, 30 * 1000, 50, 500);
+}
diff --git a/packages/backend/src/misc/escape-html.ts b/packages/backend/src/misc/escape-html.ts
new file mode 100644
index 0000000000..819aeeed52
--- /dev/null
+++ b/packages/backend/src/misc/escape-html.ts
@@ -0,0 +1,13 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function escapeHtml(text: string): string {
+ return text
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
+}
diff --git a/packages/backend/src/misc/is-channel-related.ts b/packages/backend/src/misc/is-channel-related.ts
new file mode 100644
index 0000000000..fef736dad6
--- /dev/null
+++ b/packages/backend/src/misc/is-channel-related.ts
@@ -0,0 +1,31 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { MiNote } from '@/models/Note.js';
+import { Packed } from '@/misc/json-schema.js';
+
+/**
+ * {@link note}が{@link channelIds}のチャンネルに関連するかどうかを判定し、関連する場合はtrueを返します。
+ * 関連するというのは、{@link channelIds}のチャンネルに向けての投稿であるか、またはそのチャンネルの投稿をリノート・引用リノートした投稿であるかを指します。
+ *
+ * @param note 確認対象のノート
+ * @param channelIds 確認対象のチャンネルID一覧
+ * @param ignoreAuthor trueの場合、ノートの所属チャンネルが{@link channelIds}に含まれていても無視します(デフォルトはfalse)
+ */
+export function isChannelRelated(note: MiNote | Packed<'Note'>, channelIds: Set, ignoreAuthor = false): boolean {
+ // ノートの所属チャンネルが確認対象のチャンネルID一覧に含まれている場合
+ if (!ignoreAuthor && note.channelId && channelIds.has(note.channelId)) {
+ return true;
+ }
+
+ const renoteChannelId = note.renote?.channelId;
+ if (renoteChannelId != null && renoteChannelId !== note.channelId && channelIds.has(renoteChannelId)) {
+ return true;
+ }
+
+ // NOTE: リプライはchannelIdのチェックだけでOKなはずなので見てない(チャンネルのノートにチャンネル外からのリプライまたはその逆はないはずなので)
+
+ return false;
+}
diff --git a/packages/backend/src/misc/json-stringify-html-safe.ts b/packages/backend/src/misc/json-stringify-html-safe.ts
new file mode 100644
index 0000000000..aac12d57db
--- /dev/null
+++ b/packages/backend/src/misc/json-stringify-html-safe.ts
@@ -0,0 +1,18 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+const ESCAPE_LOOKUP = {
+ '&': '\\u0026',
+ '>': '\\u003e',
+ '<': '\\u003c',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029',
+} as Record;
+
+const ESCAPE_REGEX = /[&><\u2028\u2029]/g;
+
+export function htmlSafeJsonStringify(obj: any): string {
+ return JSON.stringify(obj).replace(ESCAPE_REGEX, x => ESCAPE_LOOKUP[x]);
+}
diff --git a/packages/backend/src/models/ChannelMuting.ts b/packages/backend/src/models/ChannelMuting.ts
new file mode 100644
index 0000000000..11ac7e5cef
--- /dev/null
+++ b/packages/backend/src/models/ChannelMuting.ts
@@ -0,0 +1,46 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
+import { id } from './util/id.js';
+import { MiUser } from './User.js';
+import { MiChannel } from './Channel.js';
+
+@Entity('channel_muting')
+@Index(['userId', 'channelId'], {})
+export class MiChannelMuting {
+ @PrimaryColumn(id())
+ public id: string;
+
+ @Index()
+ @Column({
+ ...id(),
+ })
+ public userId: MiUser['id'];
+
+ @ManyToOne(type => MiUser, {
+ onDelete: 'CASCADE',
+ })
+ @JoinColumn()
+ public user: MiUser | null;
+
+ @Index()
+ @Column({
+ ...id(),
+ })
+ public channelId: MiChannel['id'];
+
+ @ManyToOne(type => MiChannel, {
+ onDelete: 'CASCADE',
+ })
+ @JoinColumn()
+ public channel: MiChannel | null;
+
+ @Index()
+ @Column('timestamp with time zone', {
+ nullable: true,
+ })
+ public expiresAt: Date | null;
+}
diff --git a/packages/backend/src/models/Note.ts b/packages/backend/src/models/Note.ts
index 26d5c1d535..23e5960b60 100644
--- a/packages/backend/src/models/Note.ts
+++ b/packages/backend/src/models/Note.ts
@@ -248,6 +248,14 @@ export class MiNote {
})
public renoteUserHost: string | null;
+ @Column({
+ ...id(),
+ nullable: true,
+ comment: '[Denormalized]',
+ })
+ public renoteChannelId: MiChannel['id'] | null;
+ //#endregion
+
constructor(data: Partial) {
if (data == null) return;
diff --git a/packages/backend/src/models/Page.ts b/packages/backend/src/models/Page.ts
index d112a66c04..d46f6e9d16 100644
--- a/packages/backend/src/models/Page.ts
+++ b/packages/backend/src/models/Page.ts
@@ -47,7 +47,7 @@ export class MiPage {
@Column('varchar', {
length: 32,
})
- public font: string;
+ public font: 'serif' | 'sans-serif';
@Index()
@Column({
diff --git a/packages/backend/src/models/RepositoryModule.ts b/packages/backend/src/models/RepositoryModule.ts
index 146dbbc3b8..e3db6f8838 100644
--- a/packages/backend/src/models/RepositoryModule.ts
+++ b/packages/backend/src/models/RepositoryModule.ts
@@ -21,6 +21,7 @@ import {
MiChannel,
MiChannelFavorite,
MiChannelFollowing,
+ MiChannelMuting,
MiClip,
MiClipFavorite,
MiClipNote,
@@ -429,6 +430,12 @@ const $channelFavoritesRepository: Provider = {
inject: [DI.db],
};
+const $channelMutingRepository: Provider = {
+ provide: DI.channelMutingRepository,
+ useFactory: (db: DataSource) => db.getRepository(MiChannelMuting).extend(miRepository as MiRepository),
+ inject: [DI.db],
+};
+
const $registryItemsRepository: Provider = {
provide: DI.registryItemsRepository,
useFactory: (db: DataSource) => db.getRepository(MiRegistryItem).extend(miRepository as MiRepository),
@@ -597,6 +604,7 @@ const $reversiGamesRepository: Provider = {
$channelsRepository,
$channelFollowingsRepository,
$channelFavoritesRepository,
+ $channelMutingRepository,
$registryItemsRepository,
$webhooksRepository,
$systemWebhooksRepository,
@@ -674,6 +682,7 @@ const $reversiGamesRepository: Provider = {
$channelsRepository,
$channelFollowingsRepository,
$channelFavoritesRepository,
+ $channelMutingRepository,
$registryItemsRepository,
$webhooksRepository,
$systemWebhooksRepository,
diff --git a/packages/backend/src/models/_.ts b/packages/backend/src/models/_.ts
index 84b5cbed0a..c4528e3a77 100644
--- a/packages/backend/src/models/_.ts
+++ b/packages/backend/src/models/_.ts
@@ -5,18 +5,9 @@
import {
FindOneOptions,
- InsertQueryBuilder,
ObjectLiteral,
- QueryRunner,
Repository,
- SelectQueryBuilder,
} from 'typeorm';
-import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions.js';
-import { RelationCountLoader } from 'typeorm/query-builder/relation-count/RelationCountLoader.js';
-import { RelationIdLoader } from 'typeorm/query-builder/relation-id/RelationIdLoader.js';
-import {
- RawSqlResultsToEntityTransformer,
-} from 'typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.js';
import { MiAbuseReportNotificationRecipient } from '@/models/AbuseReportNotificationRecipient.js';
import { MiAbuseUserReport } from '@/models/AbuseUserReport.js';
import { MiAccessToken } from '@/models/AccessToken.js';
@@ -32,6 +23,7 @@ import { MiBubbleGameRecord } from '@/models/BubbleGameRecord.js';
import { MiChannel } from '@/models/Channel.js';
import { MiChannelFavorite } from '@/models/ChannelFavorite.js';
import { MiChannelFollowing } from '@/models/ChannelFollowing.js';
+import { MiChannelMuting } from "@/models/ChannelMuting.js";
import { MiChatApproval } from '@/models/ChatApproval.js';
import { MiChatMessage } from '@/models/ChatMessage.js';
import { MiChatRoom } from '@/models/ChatRoom.js';
@@ -95,66 +87,12 @@ import { MiWebhook } from '@/models/Webhook.js';
import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js';
export interface MiRepository {
- createTableColumnNames(this: Repository & MiRepository): string[];
-
insertOne(this: Repository & MiRepository, entity: QueryDeepPartialEntity, findOptions?: Pick, 'relations'>): Promise;
-
- insertOneImpl(this: Repository & MiRepository, entity: QueryDeepPartialEntity, findOptions?: Pick, 'relations'>, queryRunner?: QueryRunner): Promise;
-
- selectAliasColumnNames(this: Repository & MiRepository, queryBuilder: InsertQueryBuilder, builder: SelectQueryBuilder): void;
}
export const miRepository = {
- createTableColumnNames() {
- return this.metadata.columns.filter(column => column.isSelect && !column.isVirtual).map(column => column.databaseName);
- },
async insertOne(entity, findOptions?) {
- const opt = this.manager.connection.options as PostgresConnectionOptions;
- if (opt.replication) {
- const queryRunner = this.manager.connection.createQueryRunner('master');
- try {
- return this.insertOneImpl(entity, findOptions, queryRunner);
- } finally {
- await queryRunner.release();
- }
- } else {
- return this.insertOneImpl(entity, findOptions);
- }
- },
- async insertOneImpl(entity, findOptions?, queryRunner?) {
- // ---- insert + returningの結果を共通テーブル式(CTE)に保持するクエリを生成 ----
-
- const queryBuilder = this.createQueryBuilder().insert().values(entity);
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const mainAlias = queryBuilder.expressionMap.mainAlias!;
- const name = mainAlias.name;
- mainAlias.name = 't';
- const columnNames = this.createTableColumnNames();
- queryBuilder.returning(columnNames.reduce((a, c) => `${a}, ${queryBuilder.escape(c)}`, '').slice(2));
-
- // ---- 共通テーブル式(CTE)から結果を取得 ----
- const builder = this.createQueryBuilder(undefined, queryRunner).addCommonTableExpression(queryBuilder, 'cte', { columnNames });
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- builder.expressionMap.mainAlias!.tablePath = 'cte';
- this.selectAliasColumnNames(queryBuilder, builder);
- if (findOptions) {
- builder.setFindOptions(findOptions);
- }
- const raw = await builder.execute();
- mainAlias.name = name;
- const relationId = await new RelationIdLoader(builder.connection, this.queryRunner, builder.expressionMap.relationIdAttributes).load(raw);
- const relationCount = await new RelationCountLoader(builder.connection, this.queryRunner, builder.expressionMap.relationCountAttributes).load(raw);
- const result = new RawSqlResultsToEntityTransformer(builder.expressionMap, builder.connection.driver, relationId, relationCount, this.queryRunner).transform(raw, mainAlias);
- return result[0];
- },
- selectAliasColumnNames(queryBuilder, builder) {
- let selectOrAddSelect = (selection: string, selectionAliasName?: string) => {
- selectOrAddSelect = (selection, selectionAliasName) => builder.addSelect(selection, selectionAliasName);
- return builder.select(selection, selectionAliasName);
- };
- for (const columnName of this.createTableColumnNames()) {
- selectOrAddSelect(`${builder.alias}.${columnName}`, `${builder.alias}_${columnName}`);
- }
+ return await this.insert(entity).then(x => this.findOneOrFail({ where: x.identifiers[0], ...findOptions }));
},
} satisfies MiRepository;
@@ -172,6 +110,7 @@ export {
MiBlocking,
MiChannelFollowing,
MiChannelFavorite,
+ MiChannelMuting,
MiClip,
MiClipNote,
MiClipFavorite,
@@ -251,6 +190,7 @@ export type AuthSessionsRepository = Repository & MiRepository & MiRepository;
export type ChannelFollowingsRepository = Repository & MiRepository;
export type ChannelFavoritesRepository = Repository & MiRepository;
+export type ChannelMutingRepository = Repository & MiRepository;
export type ClipsRepository = Repository & MiRepository;
export type ClipNotesRepository = Repository & MiRepository;
export type ClipFavoritesRepository = Repository & MiRepository;
diff --git a/packages/backend/src/models/json-schema/channel.ts b/packages/backend/src/models/json-schema/channel.ts
index d233f7858d..e7613290d1 100644
--- a/packages/backend/src/models/json-schema/channel.ts
+++ b/packages/backend/src/models/json-schema/channel.ts
@@ -40,6 +40,11 @@ export const packedChannelSchema = {
format: 'url',
nullable: true, optional: false,
},
+ bannerId: {
+ type: 'string',
+ nullable: true, optional: false,
+ format: 'id',
+ },
pinnedNoteIds: {
type: 'array',
nullable: false, optional: false,
@@ -80,6 +85,10 @@ export const packedChannelSchema = {
type: 'boolean',
optional: true, nullable: false,
},
+ isMuting: {
+ type: 'boolean',
+ optional: true, nullable: false,
+ },
pinnedNotes: {
type: 'array',
optional: true, nullable: false,
diff --git a/packages/backend/src/models/json-schema/page.ts b/packages/backend/src/models/json-schema/page.ts
index 748d6f1245..8f6d5c675d 100644
--- a/packages/backend/src/models/json-schema/page.ts
+++ b/packages/backend/src/models/json-schema/page.ts
@@ -174,6 +174,7 @@ export const packedPageSchema = {
font: {
type: 'string',
optional: false, nullable: false,
+ enum: ['serif', 'sans-serif'],
},
script: {
type: 'string',
diff --git a/packages/backend/src/postgres.ts b/packages/backend/src/postgres.ts
index f6cbbbe64c..3dcd3f0965 100644
--- a/packages/backend/src/postgres.ts
+++ b/packages/backend/src/postgres.ts
@@ -6,7 +6,6 @@
// https://github.com/typeorm/typeorm/issues/2400
import pg from 'pg';
import { DataSource, Logger, type QueryRunner } from 'typeorm';
-import * as highlight from 'cli-highlight';
import { entities as charts } from '@/core/chart/entities.js';
import { Config } from '@/config.js';
import MisskeyLogger from '@/logger.js';
@@ -25,6 +24,7 @@ import { MiAuthSession } from '@/models/AuthSession.js';
import { MiBlocking } from '@/models/Blocking.js';
import { MiChannelFollowing } from '@/models/ChannelFollowing.js';
import { MiChannelFavorite } from '@/models/ChannelFavorite.js';
+import { MiChannelMuting } from '@/models/ChannelMuting.js';
import { MiClip } from '@/models/Clip.js';
import { MiClipNote } from '@/models/ClipNote.js';
import { MiClipFavorite } from '@/models/ClipFavorite.js';
@@ -100,12 +100,6 @@ export type LoggerProps = {
printReplicationMode?: boolean,
};
-function highlightSql(sql: string) {
- return highlight.highlight(sql, {
- language: 'sql', ignoreIllegals: true,
- });
-}
-
function truncateSql(sql: string) {
return sql.length > 100 ? `${sql.substring(0, 100)}...` : sql;
}
@@ -131,7 +125,7 @@ class MyCustomLogger implements Logger {
modded = truncateSql(modded);
}
- return highlightSql(modded);
+ return modded;
}
@bindThis
@@ -239,6 +233,7 @@ export const entities = [
MiChannel,
MiChannelFollowing,
MiChannelFavorite,
+ MiChannelMuting,
MiRegistryItem,
MiAd,
MiPasswordResetRequest,
diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts
index 642d3fc8ad..306fdb41f6 100644
--- a/packages/backend/src/queue/QueueProcessorService.ts
+++ b/packages/backend/src/queue/QueueProcessorService.ts
@@ -5,7 +5,6 @@
import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
import * as Bull from 'bullmq';
-import * as Sentry from '@sentry/node';
import type { Config } from '@/config.js';
import { DI } from '@/di-symbols.js';
import type Logger from '@/logger.js';
@@ -157,6 +156,13 @@ export class QueueProcessorService implements OnApplicationShutdown {
};
}
+ let Sentry: typeof import('@sentry/node') | undefined;
+ if (Sentry != null) {
+ import('@sentry/node').then((mod) => {
+ Sentry = mod;
+ });
+ }
+
//#region system
{
const processer = (job: Bull.Job) => {
@@ -175,7 +181,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
};
this.systemQueueWorker = new Bull.Worker(QUEUE.SYSTEM, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: System: ' + job.name }, () => processer(job));
} else {
return processer(job);
@@ -192,7 +198,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) id=${job.id}`))
.on('failed', (job, err: Error) => {
logger.error(`failed(${err.name}: ${err.message}) id=${job?.id ?? '?'}`, { job: renderJob(job), e: renderError(err) });
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: System: ${job?.name ?? '?'}: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -232,7 +238,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
};
this.dbQueueWorker = new Bull.Worker(QUEUE.DB, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: DB: ' + job.name }, () => processer(job));
} else {
return processer(job);
@@ -249,7 +255,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) id=${job.id}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) id=${job?.id ?? '?'}`, { job: renderJob(job), e: renderError(err) });
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: DB: ${job?.name ?? '?'}: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -264,7 +270,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
//#region deliver
{
this.deliverQueueWorker = new Bull.Worker(QUEUE.DELIVER, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: Deliver' }, () => this.deliverProcessorService.process(job));
} else {
return this.deliverProcessorService.process(job);
@@ -289,7 +295,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`);
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: Deliver: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -304,7 +310,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
//#region inbox
{
this.inboxQueueWorker = new Bull.Worker(QUEUE.INBOX, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: Inbox' }, () => this.inboxProcessorService.process(job));
} else {
return this.inboxProcessorService.process(job);
@@ -329,7 +335,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) ${getJobInfo(job, true)}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, { job: renderJob(job), e: renderError(err) });
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: Inbox: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -344,7 +350,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
//#region user-webhook deliver
{
this.userWebhookDeliverQueueWorker = new Bull.Worker(QUEUE.USER_WEBHOOK_DELIVER, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: UserWebhookDeliver' }, () => this.userWebhookDeliverProcessorService.process(job));
} else {
return this.userWebhookDeliverProcessorService.process(job);
@@ -369,7 +375,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`);
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: UserWebhookDeliver: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -384,7 +390,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
//#region system-webhook deliver
{
this.systemWebhookDeliverQueueWorker = new Bull.Worker(QUEUE.SYSTEM_WEBHOOK_DELIVER, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: SystemWebhookDeliver' }, () => this.systemWebhookDeliverProcessorService.process(job));
} else {
return this.systemWebhookDeliverProcessorService.process(job);
@@ -409,7 +415,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`);
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: SystemWebhookDeliver: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -434,7 +440,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
};
this.relationshipQueueWorker = new Bull.Worker(QUEUE.RELATIONSHIP, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: Relationship: ' + job.name }, () => processer(job));
} else {
return processer(job);
@@ -456,7 +462,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) id=${job.id}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) id=${job?.id ?? '?'}`, { job: renderJob(job), e: renderError(err) });
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: Relationship: ${job?.name ?? '?'}: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -479,7 +485,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
};
this.objectStorageQueueWorker = new Bull.Worker(QUEUE.OBJECT_STORAGE, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: ObjectStorage: ' + job.name }, () => processer(job));
} else {
return processer(job);
@@ -497,7 +503,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
.on('completed', (job, result) => logger.debug(`completed(${result}) id=${job.id}`))
.on('failed', (job, err) => {
logger.error(`failed(${err.name}: ${err.message}) id=${job?.id ?? '?'}`, { job: renderJob(job), e: renderError(err) });
- if (config.sentryForBackend) {
+ if (Sentry != null) {
Sentry.captureMessage(`Queue: ObjectStorage: ${job?.name ?? '?'}: ${err.name}: ${err.message}`, {
level: 'error',
extra: { job, err },
@@ -512,7 +518,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
//#region ended poll notification
{
this.endedPollNotificationQueueWorker = new Bull.Worker(QUEUE.ENDED_POLL_NOTIFICATION, (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: EndedPollNotification' }, () => this.endedPollNotificationProcessorService.process(job));
} else {
return this.endedPollNotificationProcessorService.process(job);
@@ -527,7 +533,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
//#region post scheduled note
{
this.postScheduledNoteQueueWorker = new Bull.Worker(QUEUE.POST_SCHEDULED_NOTE, async (job) => {
- if (this.config.sentryForBackend) {
+ if (Sentry != null) {
return Sentry.startSpan({ name: 'Queue: PostScheduledNote' }, () => this.postScheduledNoteProcessorService.process(job));
} else {
return this.postScheduledNoteProcessorService.process(job);
diff --git a/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts b/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts
index 448fc9c763..e898e6dd48 100644
--- a/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts
+++ b/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts
@@ -4,14 +4,13 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import { In } from 'typeorm';
import { DI } from '@/di-symbols.js';
import type { MutingsRepository } from '@/models/_.js';
import type Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
import { UserMutingService } from '@/core/UserMutingService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
-import type * as Bull from 'bullmq';
@Injectable()
export class CheckExpiredMutingsProcessorService {
@@ -22,6 +21,7 @@ export class CheckExpiredMutingsProcessorService {
private mutingsRepository: MutingsRepository,
private userMutingService: UserMutingService,
+ private channelMutingService: ChannelMutingService,
private queueLoggerService: QueueLoggerService,
) {
this.logger = this.queueLoggerService.logger.createSubLogger('check-expired-mutings');
@@ -41,6 +41,8 @@ export class CheckExpiredMutingsProcessorService {
await this.userMutingService.unmute(expired);
}
+ await this.channelMutingService.eraseExpiredMutings();
+
this.logger.succ('All expired mutings checked.');
}
}
diff --git a/packages/backend/src/queue/processors/CleanRemoteNotesProcessorService.ts b/packages/backend/src/queue/processors/CleanRemoteNotesProcessorService.ts
index 36c34c753c..bc99dea000 100644
--- a/packages/backend/src/queue/processors/CleanRemoteNotesProcessorService.ts
+++ b/packages/backend/src/queue/processors/CleanRemoteNotesProcessorService.ts
@@ -51,6 +51,17 @@ export class CleanRemoteNotesProcessorService {
skipped: boolean;
transientErrors: number;
}> {
+ const getConfig = () => {
+ return {
+ enabled: this.meta.enableRemoteNotesCleaning,
+ maxDuration: this.meta.remoteNotesCleaningMaxProcessingDurationInMinutes * 60 * 1000, // Convert minutes to milliseconds
+ // The date limit for the newest note to be considered for deletion.
+ // All notes newer than this limit will always be retained.
+ newestLimit: this.idService.gen(Date.now() - (1000 * 60 * 60 * 24 * this.meta.remoteNotesCleaningExpiryDaysForEachNotes)),
+ };
+ };
+
+ const initialConfig = getConfig();
if (!this.meta.enableRemoteNotesCleaning) {
this.logger.info('Remote notes cleaning is disabled, skipping...');
return {
@@ -64,13 +75,9 @@ export class CleanRemoteNotesProcessorService {
this.logger.info('cleaning remote notes...');
- const maxDuration = this.meta.remoteNotesCleaningMaxProcessingDurationInMinutes * 60 * 1000; // Convert minutes to milliseconds
const startAt = Date.now();
//#region queries
- // The date limit for the newest note to be considered for deletion.
- // All notes newer than this limit will always be retained.
- const newestLimit = this.idService.gen(Date.now() - (1000 * 60 * 60 * 24 * this.meta.remoteNotesCleaningExpiryDaysForEachNotes));
// The condition for removing the notes.
// The note must be:
@@ -92,7 +99,7 @@ export class CleanRemoteNotesProcessorService {
const minId = (await this.notesRepository.createQueryBuilder('note')
.select('MIN(note.id)', 'minId')
.where({
- id: LessThan(newestLimit),
+ id: LessThan(initialConfig.newestLimit),
userHost: Not(IsNull()),
replyId: IsNull(),
renoteId: IsNull(),
@@ -155,12 +162,12 @@ export class CleanRemoteNotesProcessorService {
// | fff | fff | TRUE |
// | ggg | ggg | FALSE |
//
- const candidateNotesQuery = this.db.createQueryBuilder()
+ const candidateNotesQuery = ({ limit }: { limit: number }) => this.db.createQueryBuilder()
.select(`"${candidateNotesCteName}"."id"`, 'id')
.addSelect('unremovable."id" IS NULL', 'isRemovable')
.addSelect(`BOOL_OR("${candidateNotesCteName}"."isBase")`, 'isBase')
.addCommonTableExpression(
- `((SELECT "base".* FROM (${candidateNotesQueryBase.orderBy('note.id', 'ASC').limit(currentLimit).getQuery()}) AS "base") UNION ${candidateNotesQueryInductive.getQuery()})`,
+ `((SELECT "base".* FROM (${candidateNotesQueryBase.orderBy('note.id', 'ASC').limit(limit).getQuery()}) AS "base") UNION ${candidateNotesQueryInductive.getQuery()})`,
candidateNotesCteName,
{ recursive: true },
)
@@ -178,6 +185,11 @@ export class CleanRemoteNotesProcessorService {
let lowThroughputWarned = false;
let transientErrors = 0;
for (;;) {
+ const { enabled, maxDuration, newestLimit } = getConfig();
+ if (!enabled) {
+ this.logger.info('Remote notes cleaning is disabled, processing stopped...');
+ break;
+ }
//#region check time
const batchBeginAt = Date.now();
@@ -205,13 +217,38 @@ export class CleanRemoteNotesProcessorService {
let noteIds = null;
try {
- noteIds = await candidateNotesQuery.setParameters(
+ noteIds = await candidateNotesQuery({ limit: currentLimit }).setParameters(
{ newestLimit, cursorLeft },
).getRawMany<{ id: MiNote['id'], isRemovable: boolean, isBase: boolean }>();
} catch (e) {
- if (currentLimit > minimumLimit && e instanceof QueryFailedError && e.driverError?.code === '57014') {
- // Statement timeout (maybe suddenly hit a large note tree), reduce the limit and try again
- // continuous failures will eventually converge to currentLimit == minimumLimit and then throw
+ if (e instanceof QueryFailedError && e.driverError?.code === '57014') {
+ // Statement timeout (maybe suddenly hit a large note tree), if possible, reduce the limit and try again
+ // if not possible, skip the current batch of notes and find the next root note
+ if (currentLimit <= minimumLimit) {
+ job.log('Local note tree complexity is too high, finding next root note...');
+
+ const idWindow = await this.notesRepository.createQueryBuilder('note')
+ .select('id')
+ .where('note.id > :cursorLeft')
+ .andWhere(removalCriteria)
+ .andWhere({ replyId: IsNull(), renoteId: IsNull() })
+ .orderBy('note.id', 'ASC')
+ .limit(minimumLimit + 1)
+ .setParameters({ cursorLeft, newestLimit })
+ .getRawMany<{ id?: MiNote['id'] }>();
+
+ job.log(`Skipped note IDs: ${idWindow.slice(0, minimumLimit).map(id => id.id).join(', ')}`);
+
+ const lastId = idWindow.at(minimumLimit)?.id;
+
+ if (!lastId) {
+ job.log('No more notes to clean.');
+ break;
+ }
+
+ cursorLeft = lastId;
+ continue;
+ }
currentLimit = Math.max(minimumLimit, Math.floor(currentLimit * 0.25));
continue;
}
diff --git a/packages/backend/src/server/ServerModule.ts b/packages/backend/src/server/ServerModule.ts
index 0223650329..111421472d 100644
--- a/packages/backend/src/server/ServerModule.ts
+++ b/packages/backend/src/server/ServerModule.ts
@@ -25,6 +25,7 @@ import { SignupApiService } from './api/SignupApiService.js';
import { StreamingApiServerService } from './api/StreamingApiServerService.js';
import { OpenApiServerService } from './api/openapi/OpenApiServerService.js';
import { ClientServerService } from './web/ClientServerService.js';
+import { HtmlTemplateService } from './web/HtmlTemplateService.js';
import { FeedService } from './web/FeedService.js';
import { UrlPreviewService } from './web/UrlPreviewService.js';
import { ClientLoggerService } from './web/ClientLoggerService.js';
@@ -58,6 +59,7 @@ import { SigninWithPasskeyApiService } from './api/SigninWithPasskeyApiService.j
providers: [
ClientServerService,
ClientLoggerService,
+ HtmlTemplateService,
FeedService,
HealthServerService,
UrlPreviewService,
diff --git a/packages/backend/src/server/ServerService.ts b/packages/backend/src/server/ServerService.ts
index 1286b4dad6..4e05322b12 100644
--- a/packages/backend/src/server/ServerService.ts
+++ b/packages/backend/src/server/ServerService.ts
@@ -75,7 +75,7 @@ export class ServerService implements OnApplicationShutdown {
@bindThis
public async launch(): Promise {
const fastify = Fastify({
- trustProxy: this.config.trustProxy ?? true,
+ trustProxy: this.config.trustProxy ?? false,
logger: false,
});
this.#fastify = fastify;
diff --git a/packages/backend/src/server/api/ApiCallService.ts b/packages/backend/src/server/api/ApiCallService.ts
index 7a4af407a3..27c79ab438 100644
--- a/packages/backend/src/server/api/ApiCallService.ts
+++ b/packages/backend/src/server/api/ApiCallService.ts
@@ -7,7 +7,6 @@ import { randomUUID } from 'node:crypto';
import * as fs from 'node:fs';
import * as stream from 'node:stream/promises';
import { Inject, Injectable } from '@nestjs/common';
-import * as Sentry from '@sentry/node';
import { DI } from '@/di-symbols.js';
import { getIpHash } from '@/misc/get-ip-hash.js';
import type { MiLocalUser, MiUser } from '@/models/User.js';
@@ -37,6 +36,7 @@ export class ApiCallService implements OnApplicationShutdown {
private logger: Logger;
private userIpHistories: Map>;
private userIpHistoriesClearIntervalId: NodeJS.Timeout;
+ private Sentry: typeof import('@sentry/node') | null = null;
constructor(
@Inject(DI.meta)
@@ -59,6 +59,12 @@ export class ApiCallService implements OnApplicationShutdown {
this.userIpHistoriesClearIntervalId = setInterval(() => {
this.userIpHistories.clear();
}, 1000 * 60 * 60);
+
+ if (this.config.sentryForBackend) {
+ import('@sentry/node').then((Sentry) => {
+ this.Sentry = Sentry;
+ });
+ }
}
#sendApiError(reply: FastifyReply, err: ApiError): void {
@@ -120,8 +126,8 @@ export class ApiCallService implements OnApplicationShutdown {
},
});
- if (this.config.sentryForBackend) {
- Sentry.captureMessage(`Internal error occurred in ${ep.name}: ${err.message}`, {
+ if (this.Sentry != null) {
+ this.Sentry.captureMessage(`Internal error occurred in ${ep.name}: ${err.message}`, {
level: 'error',
user: {
id: userId,
@@ -432,8 +438,8 @@ export class ApiCallService implements OnApplicationShutdown {
}
// API invoking
- if (this.config.sentryForBackend) {
- return await Sentry.startSpan({
+ if (this.Sentry != null) {
+ return await this.Sentry.startSpan({
name: 'API: ' + ep.name,
}, () => ep.exec(data, user, token, file, request.ip, request.headers)
.catch((err: Error) => this.#onExecError(ep, data, err, user?.id)));
diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts
index 2a4e1fc574..21f2f0b7e2 100644
--- a/packages/backend/src/server/api/StreamingApiServerService.ts
+++ b/packages/backend/src/server/api/StreamingApiServerService.ts
@@ -15,6 +15,7 @@ import { CacheService } from '@/core/CacheService.js';
import { MiLocalUser } from '@/models/User.js';
import { UserService } from '@/core/UserService.js';
import { ChannelFollowingService } from '@/core/ChannelFollowingService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { AuthenticateService, AuthenticationError } from './AuthenticateService.js';
import MainStreamConnection from './stream/Connection.js';
import { ChannelsService } from './stream/ChannelsService.js';
@@ -39,6 +40,7 @@ export class StreamingApiServerService {
private notificationService: NotificationService,
private usersService: UserService,
private channelFollowingService: ChannelFollowingService,
+ private channelMutingService: ChannelMutingService,
) {
}
@@ -97,6 +99,7 @@ export class StreamingApiServerService {
this.notificationService,
this.cacheService,
this.channelFollowingService,
+ this.channelMutingService,
user, app,
);
diff --git a/packages/backend/src/server/api/endpoint-list.ts b/packages/backend/src/server/api/endpoint-list.ts
index f4aa07875d..9aecc0f0fd 100644
--- a/packages/backend/src/server/api/endpoint-list.ts
+++ b/packages/backend/src/server/api/endpoint-list.ts
@@ -143,6 +143,9 @@ export * as 'channels/timeline' from './endpoints/channels/timeline.js';
export * as 'channels/unfavorite' from './endpoints/channels/unfavorite.js';
export * as 'channels/unfollow' from './endpoints/channels/unfollow.js';
export * as 'channels/update' from './endpoints/channels/update.js';
+export * as 'channels/mute/create' from './endpoints/channels/mute/create.js';
+export * as 'channels/mute/delete' from './endpoints/channels/mute/delete.js';
+export * as 'channels/mute/list' from './endpoints/channels/mute/list.js';
export * as 'charts/active-users' from './endpoints/charts/active-users.js';
export * as 'charts/ap-request' from './endpoints/charts/ap-request.js';
export * as 'charts/drive' from './endpoints/charts/drive.js';
diff --git a/packages/backend/src/server/api/endpoints/antennas/notes.ts b/packages/backend/src/server/api/endpoints/antennas/notes.ts
index b2d9cea03c..c59479d370 100644
--- a/packages/backend/src/server/api/endpoints/antennas/notes.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/notes.ts
@@ -5,6 +5,7 @@
import { Inject, Injectable } from '@nestjs/common';
import * as Redis from 'ioredis';
+import { Brackets } from 'typeorm';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { NotesRepository, AntennasRepository } from '@/models/_.js';
import { QueryService } from '@/core/QueryService.js';
@@ -14,6 +15,7 @@ import { IdService } from '@/core/IdService.js';
import { FanoutTimelineService } from '@/core/FanoutTimelineService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { trackPromise } from '@/misc/promise-tracker.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -69,6 +71,7 @@ export default class extends Endpoint { // eslint-
private queryService: QueryService,
private fanoutTimelineService: FanoutTimelineService,
private globalEventService: GlobalEventService,
+ private channelMutingService: ChannelMutingService,
) {
super(meta, paramDef, async (ps, me) => {
const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
@@ -108,6 +111,21 @@ export default class extends Endpoint { // eslint-
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');
+ // -- ミュートされたチャンネル対策
+ const mutingChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id));
+ if (mutingChannelIds.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.channelId IS NULL');
+ qb.orWhere('note.channelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }));
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteChannelId IS NULL');
+ qb.orWhere('note.renoteChannelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }));
+ }
+
// NOTE: センシティブ除外の設定はこのエンドポイントでは無視する。
// https://github.com/misskey-dev/misskey/pull/15346#discussion_r1929950255
diff --git a/packages/backend/src/server/api/endpoints/channels/create.ts b/packages/backend/src/server/api/endpoints/channels/create.ts
index e3a6d2d670..8d49b6fd0f 100644
--- a/packages/backend/src/server/api/endpoints/channels/create.ts
+++ b/packages/backend/src/server/api/endpoints/channels/create.ts
@@ -46,7 +46,7 @@ export const paramDef = {
type: 'object',
properties: {
name: { type: 'string', minLength: 1, maxLength: 128 },
- description: { type: 'string', nullable: true, minLength: 1, maxLength: 2048 },
+ description: { type: 'string', nullable: true, maxLength: 2048 },
bannerId: { type: 'string', format: 'misskey:id', nullable: true },
color: { type: 'string', minLength: 1, maxLength: 16 },
isSensitive: { type: 'boolean', nullable: true },
diff --git a/packages/backend/src/server/api/endpoints/channels/mute/create.ts b/packages/backend/src/server/api/endpoints/channels/mute/create.ts
new file mode 100644
index 0000000000..26ce707c7a
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/channels/mute/create.ts
@@ -0,0 +1,90 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import type { ChannelsRepository } from '@/models/_.js';
+import { DI } from '@/di-symbols.js';
+import { ApiError } from '@/server/api/error.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
+
+export const meta = {
+ tags: ['channels', 'mute'],
+
+ requireCredential: true,
+ prohibitMoved: true,
+
+ kind: 'write:channels',
+
+ errors: {
+ noSuchChannel: {
+ message: 'No such Channel.',
+ code: 'NO_SUCH_CHANNEL',
+ id: '7174361e-d58f-31d6-2e7c-6fb830786a3f',
+ },
+
+ alreadyMuting: {
+ message: 'You are already muting that user.',
+ code: 'ALREADY_MUTING_CHANNEL',
+ id: '5a251978-769a-da44-3e89-3931e43bb592',
+ },
+
+ expiresAtIsPast: {
+ message: 'Cannot set past date to "expiresAt".',
+ code: 'EXPIRES_AT_IS_PAST',
+ id: '42b32236-df2c-a45f-fdbf-def67268f749',
+ },
+ },
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ channelId: { type: 'string', format: 'misskey:id' },
+ expiresAt: {
+ type: 'integer',
+ nullable: true,
+ description: 'A Unix Epoch timestamp that must lie in the future. `null` means an indefinite mute.',
+ },
+ },
+ required: ['channelId'],
+} as const;
+
+@Injectable()
+export default class extends Endpoint { // eslint-disable-line import/no-default-export
+ constructor(
+ @Inject(DI.channelsRepository)
+ private channelsRepository: ChannelsRepository,
+ private channelMutingService: ChannelMutingService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ // Check if exists the channel
+ const targetChannel = await this.channelsRepository.findOneBy({ id: ps.channelId });
+ if (!targetChannel) {
+ throw new ApiError(meta.errors.noSuchChannel);
+ }
+
+ // Check if already muting
+ const exist = await this.channelMutingService.isMuted({
+ requestUserId: me.id,
+ targetChannelId: targetChannel.id,
+ });
+ if (exist) {
+ throw new ApiError(meta.errors.alreadyMuting);
+ }
+
+ // Check if expiresAt is past
+ if (ps.expiresAt && ps.expiresAt <= Date.now()) {
+ throw new ApiError(meta.errors.expiresAtIsPast);
+ }
+
+ await this.channelMutingService.mute({
+ requestUserId: me.id,
+ targetChannelId: targetChannel.id,
+ expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null,
+ });
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/channels/mute/delete.ts b/packages/backend/src/server/api/endpoints/channels/mute/delete.ts
new file mode 100644
index 0000000000..79abeebe99
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/channels/mute/delete.ts
@@ -0,0 +1,73 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import type { ChannelsRepository } from '@/models/_.js';
+import { DI } from '@/di-symbols.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
+import { ApiError } from '@/server/api/error.js';
+
+export const meta = {
+ tags: ['channels', 'mute'],
+
+ requireCredential: true,
+ prohibitMoved: true,
+
+ kind: 'write:channels',
+
+ errors: {
+ noSuchChannel: {
+ message: 'No such Channel.',
+ code: 'NO_SUCH_CHANNEL',
+ id: 'e7998769-6e94-d9c2-6b8f-94a527314aba',
+ },
+
+ notMuting: {
+ message: 'You are not muting that channel.',
+ code: 'NOT_MUTING_CHANNEL',
+ id: '14d55962-6ea8-d990-1333-d6bef78dc2ab',
+ },
+ },
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ channelId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['channelId'],
+} as const;
+
+@Injectable()
+export default class extends Endpoint { // eslint-disable-line import/no-default-export
+ constructor(
+ @Inject(DI.channelsRepository)
+ private channelsRepository: ChannelsRepository,
+ private channelMutingService: ChannelMutingService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ // Check if exists the channel
+ const targetChannel = await this.channelsRepository.findOneBy({ id: ps.channelId });
+ if (!targetChannel) {
+ throw new ApiError(meta.errors.noSuchChannel);
+ }
+
+ // Check muting
+ const exist = await this.channelMutingService.isMuted({
+ requestUserId: me.id,
+ targetChannelId: targetChannel.id,
+ });
+ if (!exist) {
+ throw new ApiError(meta.errors.notMuting);
+ }
+
+ await this.channelMutingService.unmute({
+ requestUserId: me.id,
+ targetChannelId: targetChannel.id,
+ });
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/channels/mute/list.ts b/packages/backend/src/server/api/endpoints/channels/mute/list.ts
new file mode 100644
index 0000000000..74338eea38
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/channels/mute/list.ts
@@ -0,0 +1,49 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
+import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js';
+
+export const meta = {
+ tags: ['channels', 'mute'],
+
+ requireCredential: true,
+ prohibitMoved: true,
+
+ kind: 'read:channels',
+
+ res: {
+ type: 'array',
+ optional: false, nullable: false,
+ items: {
+ type: 'object',
+ optional: false, nullable: false,
+ ref: 'Channel',
+ },
+ },
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
+} as const;
+
+@Injectable()
+export default class extends Endpoint { // eslint-disable-line import/no-default-export
+ constructor(
+ private channelMutingService: ChannelMutingService,
+ private channelEntityService: ChannelEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const mutings = await this.channelMutingService.list({
+ requestUserId: me.id,
+ });
+ return await this.channelEntityService.packMany(mutings, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/channels/timeline.ts b/packages/backend/src/server/api/endpoints/channels/timeline.ts
index 46b050d4b4..4f56bc2110 100644
--- a/packages/backend/src/server/api/endpoints/channels/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/channels/timeline.ts
@@ -13,6 +13,7 @@ import { DI } from '@/di-symbols.js';
import { IdService } from '@/core/IdService.js';
import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js';
import { MiLocalUser } from '@/models/User.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -70,6 +71,7 @@ export default class extends Endpoint { // eslint-
private queryService: QueryService,
private fanoutTimelineEndpointService: FanoutTimelineEndpointService,
private activeUsersChart: ActiveUsersChart,
+ private channelMutingService: ChannelMutingService,
) {
super(meta, paramDef, async (ps, me) => {
const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
@@ -98,6 +100,7 @@ export default class extends Endpoint { // eslint-
useDbFallback: true,
redisTimelines: [`channelTimeline:${channel.id}`],
excludePureRenotes: false,
+ ignoreAuthorChannelFromMute: true,
dbFallback: async (untilId, sinceId, limit) => {
return await this.getFromDb({ untilId, sinceId, limit, channelId: channel.id }, me);
},
@@ -122,6 +125,16 @@ export default class extends Endpoint { // eslint-
.leftJoinAndSelect('note.channel', 'channel');
this.queryService.generateBaseNoteFilteringQuery(query, me);
+
+ if (me) {
+ const mutingChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id).filter(x => x !== ps.channelId));
+ if (mutingChannelIds.length > 0) {
+ query.andWhere('note.channelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ query.andWhere('note.renoteChannelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }
+ }
//#endregion
return await query.limit(ps.limit).getMany();
diff --git a/packages/backend/src/server/api/endpoints/channels/update.ts b/packages/backend/src/server/api/endpoints/channels/update.ts
index dba2938b39..5ec55896e4 100644
--- a/packages/backend/src/server/api/endpoints/channels/update.ts
+++ b/packages/backend/src/server/api/endpoints/channels/update.ts
@@ -50,7 +50,7 @@ export const paramDef = {
properties: {
channelId: { type: 'string', format: 'misskey:id' },
name: { type: 'string', minLength: 1, maxLength: 128 },
- description: { type: 'string', nullable: true, minLength: 1, maxLength: 2048 },
+ description: { type: 'string', nullable: true, maxLength: 2048 },
bannerId: { type: 'string', format: 'misskey:id', nullable: true },
isArchived: { type: 'boolean', nullable: true },
pinnedNoteIds: {
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index 5c7958fc1c..9971a1ea4d 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -7,7 +7,7 @@ import RE2 from 're2';
import * as mfm from 'mfm-js';
import { Inject, Injectable } from '@nestjs/common';
import ms from 'ms';
-import { JSDOM } from 'jsdom';
+import * as htmlParser from 'node-html-parser';
import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm.js';
import { extractHashtags } from '@/misc/extract-hashtags.js';
import * as Acct from '@/misc/acct.js';
@@ -295,8 +295,20 @@ export default class extends Endpoint { // eslint-
if (ps.chatScope !== undefined) updates.chatScope = ps.chatScope;
function checkMuteWordCount(mutedWords: (string[] | string)[], limit: number) {
- // TODO: ちゃんと数える
- const length = JSON.stringify(mutedWords).length;
+ const count = (arr: (string[] | string)[]) => {
+ let length = 0;
+ for (const item of arr) {
+ if (typeof item === 'string') {
+ length += item.length;
+ } else if (Array.isArray(item)) {
+ for (const subItem of item) {
+ length += subItem.length;
+ }
+ }
+ }
+ return length;
+ };
+ const length = count(mutedWords);
if (length > limit) {
throw new ApiError(meta.errors.tooManyMutedWords);
}
@@ -557,16 +569,15 @@ export default class extends Endpoint { // eslint-
try {
const html = await this.httpRequestService.getHtml(url);
- const { window } = new JSDOM(html);
- const doc: Document = window.document;
+ const doc = htmlParser.parse(html);
const myLink = `${this.config.url}/@${user.username}`;
const aEls = Array.from(doc.getElementsByTagName('a'));
const linkEls = Array.from(doc.getElementsByTagName('link'));
- const includesMyLink = aEls.some(a => a.href === myLink);
- const includesRelMeLinks = [...aEls, ...linkEls].some(link => link.rel === 'me' && link.href === myLink);
+ const includesMyLink = aEls.some(a => a.attributes.href === myLink);
+ const includesRelMeLinks = [...aEls, ...linkEls].some(link => link.attributes.rel?.split(/\s+/).includes('me') && link.attributes.href === myLink);
if (includesMyLink || includesRelMeLinks) {
await this.userProfilesRepository.createQueryBuilder('profile').update()
@@ -576,8 +587,6 @@ export default class extends Endpoint { // eslint-
})
.execute();
}
-
- window.close();
} catch (err) {
// なにもしない
}
diff --git a/packages/backend/src/server/api/endpoints/notes/drafts/create.ts b/packages/backend/src/server/api/endpoints/notes/drafts/create.ts
index 880f4964a1..efb5ee01d1 100644
--- a/packages/backend/src/server/api/endpoints/notes/drafts/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/drafts/create.ts
@@ -135,6 +135,18 @@ export const meta = {
code: 'CANNOT_RENOTE_TO_EXTERNAL',
id: 'ed1952ac-2d26-4957-8b30-2deda76bedf7',
},
+
+ scheduledAtRequired: {
+ message: 'scheduledAt is required when isActuallyScheduled is true.',
+ code: 'SCHEDULED_AT_REQUIRED',
+ id: '15e28a55-e74c-4d65-89b7-8880cdaaa87d',
+ },
+
+ scheduledAtMustBeInFuture: {
+ message: 'scheduledAt must be in the future.',
+ code: 'SCHEDULED_AT_MUST_BE_IN_FUTURE',
+ id: 'e4bed6c9-017e-4934-aed0-01c22cc60ec1',
+ },
},
limit: {
@@ -252,6 +264,10 @@ export default class extends Endpoint { // eslint-
throw new ApiError(meta.errors.cannotReplyToSpecifiedVisibilityNoteWithExtendedVisibility);
case 'c3275f19-4558-4c59-83e1-4f684b5fab66':
throw new ApiError(meta.errors.tooManyScheduledNotes);
+ case '94a89a43-3591-400a-9c17-dd166e71fdfa':
+ throw new ApiError(meta.errors.scheduledAtRequired);
+ case 'b34d0c1b-996f-4e34-a428-c636d98df457':
+ throw new ApiError(meta.errors.scheduledAtMustBeInFuture);
default:
throw err;
}
diff --git a/packages/backend/src/server/api/endpoints/notes/drafts/update.ts b/packages/backend/src/server/api/endpoints/notes/drafts/update.ts
index 9a2e2ca415..2900e0cb0d 100644
--- a/packages/backend/src/server/api/endpoints/notes/drafts/update.ts
+++ b/packages/backend/src/server/api/endpoints/notes/drafts/update.ts
@@ -165,6 +165,18 @@ export const meta = {
code: 'TOO_MANY_SCHEDULED_NOTES',
id: '02f5df79-08ae-4a33-8524-f1503c8f6212',
},
+
+ scheduledAtRequired: {
+ message: 'scheduledAt is required when isActuallyScheduled is true.',
+ code: 'SCHEDULED_AT_REQUIRED',
+ id: 'fe9737d5-cc41-498c-af9d-149207307530',
+ },
+
+ scheduledAtMustBeInFuture: {
+ message: 'scheduledAt must be in the future.',
+ code: 'SCHEDULED_AT_MUST_BE_IN_FUTURE',
+ id: 'ed1a6673-d0d1-4364-aaae-9bf3f139cbc5',
+ },
},
limit: {
@@ -295,6 +307,10 @@ export default class extends Endpoint { // eslint-
throw new ApiError(meta.errors.containsTooManyMentions);
case 'bacdf856-5c51-4159-b88a-804fa5103be5':
throw new ApiError(meta.errors.tooManyScheduledNotes);
+ case '94a89a43-3591-400a-9c17-dd166e71fdfa':
+ throw new ApiError(meta.errors.scheduledAtRequired);
+ case 'b34d0c1b-996f-4e34-a428-c636d98df457':
+ throw new ApiError(meta.errors.scheduledAtMustBeInFuture);
default:
throw err;
}
diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
index 2c8459525a..0a3602df20 100644
--- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -18,6 +18,8 @@ import { QueryService } from '@/core/QueryService.js';
import { UserFollowingService } from '@/core/UserFollowingService.js';
import { MiLocalUser } from '@/models/User.js';
import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
+import { ChannelFollowingService } from '@/core/ChannelFollowingService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -46,7 +48,7 @@ export const meta = {
bothWithRepliesAndWithFiles: {
message: 'Specifying both withReplies and withFiles is not supported',
code: 'BOTH_WITH_REPLIES_AND_WITH_FILES',
- id: 'dfaa3eb7-8002-4cb7-bcc4-1095df46656f'
+ id: 'dfaa3eb7-8002-4cb7-bcc4-1095df46656f',
},
},
} as const;
@@ -79,9 +81,6 @@ export default class extends Endpoint { // eslint-
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
- @Inject(DI.channelFollowingsRepository)
- private channelFollowingsRepository: ChannelFollowingsRepository,
-
private noteEntityService: NoteEntityService,
private roleService: RoleService,
private activeUsersChart: ActiveUsersChart,
@@ -89,6 +88,8 @@ export default class extends Endpoint { // eslint-
private cacheService: CacheService,
private queryService: QueryService,
private userFollowingService: UserFollowingService,
+ private channelMutingService: ChannelMutingService,
+ private channelFollowingService: ChannelFollowingService,
private fanoutTimelineEndpointService: FanoutTimelineEndpointService,
) {
super(meta, paramDef, async (ps, me) => {
@@ -196,11 +197,13 @@ export default class extends Endpoint { // eslint-
withReplies: boolean,
}, me: MiLocalUser) {
const followees = await this.userFollowingService.getFollowees(me.id);
- const followingChannels = await this.channelFollowingsRepository.find({
- where: {
- followerId: me.id,
- },
- });
+
+ const mutingChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id));
+ const followingChannelIds = await this.channelFollowingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id).filter(x => !mutingChannelIds.includes(x)));
const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId)
.andWhere(new Brackets(qb => {
@@ -219,9 +222,7 @@ export default class extends Endpoint { // eslint-
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');
- if (followingChannels.length > 0) {
- const followingChannelIds = followingChannels.map(x => x.followeeId);
-
+ if (followingChannelIds.length > 0) {
query.andWhere(new Brackets(qb => {
qb.where('note.channelId IN (:...followingChannelIds)', { followingChannelIds });
qb.orWhere('note.channelId IS NULL');
@@ -230,6 +231,13 @@ export default class extends Endpoint { // eslint-
query.andWhere('note.channelId IS NULL');
}
+ if (mutingChannelIds.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteChannelId IS NULL');
+ qb.orWhere('note.renoteChannelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }));
+ }
+
if (!ps.withReplies) {
query.andWhere(new Brackets(qb => {
qb
diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
index ee61ab43da..ec9e52cf04 100644
--- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
@@ -15,6 +15,7 @@ import { IdService } from '@/core/IdService.js';
import { QueryService } from '@/core/QueryService.js';
import { MiLocalUser } from '@/models/User.js';
import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -76,6 +77,7 @@ export default class extends Endpoint { // eslint-
private idService: IdService,
private fanoutTimelineEndpointService: FanoutTimelineEndpointService,
private queryService: QueryService,
+ private channelMutingService: ChannelMutingService,
) {
super(meta, paramDef, async (ps, me) => {
const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
@@ -157,7 +159,19 @@ export default class extends Endpoint { // eslint-
this.queryService.generateVisibilityQuery(query, me);
this.queryService.generateBaseNoteFilteringQuery(query, me);
- if (me) this.queryService.generateMutedUserRenotesQueryForNotes(query, me);
+ if (me) {
+ this.queryService.generateMutedUserRenotesQueryForNotes(query, me);
+
+ const mutedChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id));
+ if (mutedChannelIds.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteChannelId IS NULL')
+ .orWhere('note.renoteChannelId NOT IN (:...mutedChannelIds)', { mutedChannelIds });
+ }));
+ }
+ }
if (ps.withFiles) {
query.andWhere('note.fileIds != \'{}\'');
diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts
index eeeb797efc..fe9c412be4 100644
--- a/packages/backend/src/server/api/endpoints/notes/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts
@@ -5,7 +5,7 @@
import { Brackets } from 'typeorm';
import { Inject, Injectable } from '@nestjs/common';
-import type { NotesRepository, ChannelFollowingsRepository, MiMeta } from '@/models/_.js';
+import type { NotesRepository, MiMeta } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { QueryService } from '@/core/QueryService.js';
import ActiveUsersChart from '@/core/chart/charts/active-users.js';
@@ -16,6 +16,8 @@ import { CacheService } from '@/core/CacheService.js';
import { UserFollowingService } from '@/core/UserFollowingService.js';
import { MiLocalUser } from '@/models/User.js';
import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
+import { ChannelFollowingService } from '@/core/ChannelFollowingService.js';
export const meta = {
tags: ['notes'],
@@ -61,15 +63,14 @@ export default class extends Endpoint { // eslint-
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
- @Inject(DI.channelFollowingsRepository)
- private channelFollowingsRepository: ChannelFollowingsRepository,
-
private noteEntityService: NoteEntityService,
private activeUsersChart: ActiveUsersChart,
private idService: IdService,
private cacheService: CacheService,
private fanoutTimelineEndpointService: FanoutTimelineEndpointService,
private userFollowingService: UserFollowingService,
+ private channelMutingService: ChannelMutingService,
+ private channelFollowingService: ChannelFollowingService,
private queryService: QueryService,
) {
super(meta, paramDef, async (ps, me) => {
@@ -140,11 +141,13 @@ export default class extends Endpoint { // eslint-
private async getFromDb(ps: { untilId: string | null; sinceId: string | null; limit: number; includeMyRenotes: boolean; includeRenotedMyNotes: boolean; includeLocalRenotes: boolean; withFiles: boolean; withRenotes: boolean; }, me: MiLocalUser) {
const followees = await this.userFollowingService.getFollowees(me.id);
- const followingChannels = await this.channelFollowingsRepository.find({
- where: {
- followerId: me.id,
- },
- });
+
+ const mutingChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id));
+ const followingChannelIds = await this.channelFollowingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id).filter(x => !mutingChannelIds.includes(x)));
//#region Construct query
const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId)
@@ -154,15 +157,14 @@ export default class extends Endpoint { // eslint-
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');
- if (followees.length > 0 && followingChannels.length > 0) {
+ if (followees.length > 0 && followingChannelIds.length > 0) {
// ユーザー・チャンネルともにフォローあり
const meOrFolloweeIds = [me.id, ...followees.map(f => f.followeeId)];
- const followingChannelIds = followingChannels.map(x => x.followeeId);
query.andWhere(new Brackets(qb => {
qb
.where(new Brackets(qb2 => {
qb2
- .where('note.userId IN (:...meOrFolloweeIds)', { meOrFolloweeIds: meOrFolloweeIds })
+ .andWhere('note.userId IN (:...meOrFolloweeIds)', { meOrFolloweeIds: meOrFolloweeIds })
.andWhere('note.channelId IS NULL');
}))
.orWhere('note.channelId IN (:...followingChannelIds)', { followingChannelIds });
@@ -170,22 +172,32 @@ export default class extends Endpoint { // eslint-
} else if (followees.length > 0) {
// ユーザーフォローのみ(チャンネルフォローなし)
const meOrFolloweeIds = [me.id, ...followees.map(f => f.followeeId)];
- query
- .andWhere('note.channelId IS NULL')
- .andWhere('note.userId IN (:...meOrFolloweeIds)', { meOrFolloweeIds: meOrFolloweeIds });
- } else if (followingChannels.length > 0) {
- // チャンネルフォローのみ(ユーザーフォローなし)
- const followingChannelIds = followingChannels.map(x => x.followeeId);
query.andWhere(new Brackets(qb => {
qb
+ .andWhere('note.channelId IS NULL')
+ .andWhere('note.userId IN (:...meOrFolloweeIds)', { meOrFolloweeIds: meOrFolloweeIds });
+ if (mutingChannelIds.length > 0) {
+ qb.andWhere('note.renoteChannelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }
+ }));
+ } else if (followingChannelIds.length > 0) {
+ // チャンネルフォローのみ(ユーザーフォローなし)
+ query.andWhere(new Brackets(qb => {
+ qb
+ // renoteChannelIdは見る必要が無い
+ // ・HTLに流れてくるチャンネル=フォローしているチャンネル
+ // ・HTLにフォロー外のチャンネルが流れるのは、フォローしているユーザがそのチャンネル投稿をリノートした場合のみ
+ // つまり、ユーザフォローしてない前提のこのブロックでは見る必要が無い
.where('note.channelId IN (:...followingChannelIds)', { followingChannelIds })
.orWhere('note.userId = :meId', { meId: me.id });
}));
} else {
// フォローなし
- query
- .andWhere('note.channelId IS NULL')
- .andWhere('note.userId = :meId', { meId: me.id });
+ query.andWhere(new Brackets(qb => {
+ qb
+ .andWhere('note.channelId IS NULL')
+ .andWhere('note.userId = :meId', { meId: me.id });
+ }));
}
query.andWhere(new Brackets(qb => {
diff --git a/packages/backend/src/server/api/endpoints/notes/translate.ts b/packages/backend/src/server/api/endpoints/notes/translate.ts
index e9a6a36b02..cd7d46007c 100644
--- a/packages/backend/src/server/api/endpoints/notes/translate.ts
+++ b/packages/backend/src/server/api/endpoints/notes/translate.ts
@@ -95,7 +95,6 @@ export default class extends Endpoint { // eslint-
if (targetLang.includes('-')) targetLang = targetLang.split('-')[0];
const params = new URLSearchParams();
- params.append('auth_key', this.serverSettings.deeplAuthKey);
params.append('text', note.text);
params.append('target_lang', targetLang);
@@ -104,6 +103,7 @@ export default class extends Endpoint { // eslint-
const res = await this.httpRequestService.send(endpoint, {
method: 'POST',
headers: {
+ 'Authorization': `DeepL-Auth-Key ${this.serverSettings.deeplAuthKey}`,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: 'application/json, */*',
},
diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
index 42e80c6ae1..c0c8653f7b 100644
--- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -14,6 +14,7 @@ import { IdService } from '@/core/IdService.js';
import { QueryService } from '@/core/QueryService.js';
import { MiLocalUser } from '@/models/User.js';
import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -84,6 +85,7 @@ export default class extends Endpoint { // eslint-
private idService: IdService,
private fanoutTimelineEndpointService: FanoutTimelineEndpointService,
private queryService: QueryService,
+ private channelMutingService: ChannelMutingService,
) {
super(meta, paramDef, async (ps, me) => {
const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
@@ -187,6 +189,17 @@ export default class extends Endpoint { // eslint-
this.queryService.generateBaseNoteFilteringQuery(query, me);
this.queryService.generateMutedUserRenotesQueryForNotes(query, me);
+ // -- ミュートされたチャンネルのリノート対策
+ const mutedChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id));
+ if (mutedChannelIds.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteChannelId IS NULL')
+ .orWhere('note.renoteChannelId NOT IN (:...mutedChannelIds)', { mutedChannelIds });
+ }));
+ }
+
if (ps.includeMyRenotes === false) {
query.andWhere(new Brackets(qb => {
qb.orWhere('note.userId != :meId', { meId: me.id });
diff --git a/packages/backend/src/server/api/endpoints/roles/notes.ts b/packages/backend/src/server/api/endpoints/roles/notes.ts
index e8a760e9f8..4515c016a8 100644
--- a/packages/backend/src/server/api/endpoints/roles/notes.ts
+++ b/packages/backend/src/server/api/endpoints/roles/notes.ts
@@ -5,6 +5,7 @@
import { Inject, Injectable } from '@nestjs/common';
import * as Redis from 'ioredis';
+import { Brackets } from 'typeorm';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { NotesRepository, RolesRepository } from '@/models/_.js';
import { QueryService } from '@/core/QueryService.js';
@@ -12,6 +13,7 @@ import { DI } from '@/di-symbols.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { IdService } from '@/core/IdService.js';
import { FanoutTimelineService } from '@/core/FanoutTimelineService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -68,6 +70,7 @@ export default class extends Endpoint { // eslint-
private noteEntityService: NoteEntityService,
private queryService: QueryService,
private fanoutTimelineService: FanoutTimelineService,
+ private channelMutingService: ChannelMutingService,
) {
super(meta, paramDef, async (ps, me) => {
const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
@@ -101,6 +104,21 @@ export default class extends Endpoint { // eslint-
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');
+ // -- ミュートされたチャンネル対策
+ const mutingChannelIds = await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id));
+ if (mutingChannelIds.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.channelId IS NULL');
+ qb.orWhere('note.channelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }));
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteChannelId IS NULL');
+ qb.orWhere('note.renoteChannelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }));
+ }
+
this.queryService.generateVisibilityQuery(query, me);
this.queryService.generateBaseNoteFilteringQuery(query, me);
diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts
index 5832790a61..b9710250cf 100644
--- a/packages/backend/src/server/api/endpoints/users/notes.ts
+++ b/packages/backend/src/server/api/endpoints/users/notes.ts
@@ -16,6 +16,7 @@ import { MiLocalUser } from '@/models/User.js';
import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js';
import { FanoutTimelineName } from '@/core/FanoutTimelineService.js';
import { ApiError } from '@/server/api/error.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
export const meta = {
tags: ['users', 'notes'],
@@ -77,12 +78,12 @@ export default class extends Endpoint { // eslint-
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
-
private noteEntityService: NoteEntityService,
private queryService: QueryService,
private cacheService: CacheService,
private idService: IdService,
private fanoutTimelineEndpointService: FanoutTimelineEndpointService,
+ private channelMutingService: ChannelMutingService,
) {
super(meta, paramDef, async (ps, me) => {
const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
@@ -165,6 +166,11 @@ export default class extends Endpoint { // eslint-
withFiles: boolean,
withRenotes: boolean,
}, me: MiLocalUser | null) {
+ const mutingChannelIds = me
+ ? await this.channelMutingService
+ .list({ requestUserId: me.id }, { idOnly: true })
+ .then(x => x.map(x => x.id))
+ : [];
const isSelf = me && (me.id === ps.userId);
const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId)
@@ -177,14 +183,30 @@ export default class extends Endpoint { // eslint-
.leftJoinAndSelect('renote.user', 'renoteUser');
if (ps.withChannelNotes) {
- if (!isSelf) query.andWhere(new Brackets(qb => {
- qb.orWhere('note.channelId IS NULL');
- qb.orWhere('channel.isSensitive = false');
+ query.andWhere(new Brackets(qb => {
+ if (mutingChannelIds.length > 0) {
+ qb.andWhere('note.channelId NOT IN (:...mutingChannelIds)', { mutingChannelIds: mutingChannelIds });
+ }
+
+ if (!isSelf) {
+ qb.andWhere(new Brackets(qb2 => {
+ qb2.orWhere('note.channelId IS NULL');
+ qb2.orWhere('channel.isSensitive = false');
+ }));
+ }
}));
} else {
query.andWhere('note.channelId IS NULL');
}
+ // -- ミュートされたチャンネルのリノート対策
+ if (mutingChannelIds.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteChannelId IS NULL');
+ qb.orWhere('note.renoteChannelId NOT IN (:...mutingChannelIds)', { mutingChannelIds });
+ }));
+ }
+
this.queryService.generateVisibilityQuery(query, me);
this.queryService.generateBaseNoteFilteringQuery(query, me, {
excludeAuthor: true,
diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts
index 8e28ab263b..222086c960 100644
--- a/packages/backend/src/server/api/stream/Connection.ts
+++ b/packages/backend/src/server/api/stream/Connection.ts
@@ -11,8 +11,9 @@ import type { NotificationService } from '@/core/NotificationService.js';
import { bindThis } from '@/decorators.js';
import { CacheService } from '@/core/CacheService.js';
import { MiFollowing, MiUserProfile } from '@/models/_.js';
-import type { StreamEventEmitter, GlobalEvents } from '@/core/GlobalEventService.js';
+import type { GlobalEvents, StreamEventEmitter } from '@/core/GlobalEventService.js';
import { ChannelFollowingService } from '@/core/ChannelFollowingService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { isJsonObject } from '@/misc/json-value.js';
import type { JsonObject, JsonValue } from '@/misc/json-value.js';
import type { ChannelsService } from './ChannelsService.js';
@@ -35,6 +36,7 @@ export default class Connection {
public userProfile: MiUserProfile | null = null;
public following: Record | undefined> = {};
public followingChannels: Set = new Set();
+ public mutingChannels: Set = new Set();
public userIdsWhoMeMuting: Set = new Set();
public userIdsWhoBlockingMe: Set = new Set();
public userIdsWhoMeMutingRenotes: Set = new Set();
@@ -46,7 +48,7 @@ export default class Connection {
private notificationService: NotificationService,
private cacheService: CacheService,
private channelFollowingService: ChannelFollowingService,
-
+ private channelMutingService: ChannelMutingService,
user: MiUser | null | undefined,
token: MiAccessToken | null | undefined,
) {
@@ -57,10 +59,19 @@ export default class Connection {
@bindThis
public async fetch() {
if (this.user == null) return;
- const [userProfile, following, followingChannels, userIdsWhoMeMuting, userIdsWhoBlockingMe, userIdsWhoMeMutingRenotes] = await Promise.all([
+ const [
+ userProfile,
+ following,
+ followingChannels,
+ mutingChannels,
+ userIdsWhoMeMuting,
+ userIdsWhoBlockingMe,
+ userIdsWhoMeMutingRenotes,
+ ] = await Promise.all([
this.cacheService.userProfileCache.fetch(this.user.id),
this.cacheService.userFollowingsCache.fetch(this.user.id),
this.channelFollowingService.userFollowingChannelsCache.fetch(this.user.id),
+ this.channelMutingService.mutingChannelsCache.fetch(this.user.id),
this.cacheService.userMutingsCache.fetch(this.user.id),
this.cacheService.userBlockedCache.fetch(this.user.id),
this.cacheService.renoteMutingsCache.fetch(this.user.id),
@@ -68,6 +79,7 @@ export default class Connection {
this.userProfile = userProfile;
this.following = following;
this.followingChannels = followingChannels;
+ this.mutingChannels = mutingChannels;
this.userIdsWhoMeMuting = userIdsWhoMeMuting;
this.userIdsWhoBlockingMe = userIdsWhoBlockingMe;
this.userIdsWhoMeMutingRenotes = userIdsWhoMeMutingRenotes;
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts
index 686aea423c..465ed4238c 100644
--- a/packages/backend/src/server/api/stream/channel.ts
+++ b/packages/backend/src/server/api/stream/channel.ts
@@ -6,7 +6,8 @@
import { bindThis } from '@/decorators.js';
import { isInstanceMuted } from '@/misc/is-instance-muted.js';
import { isUserRelated } from '@/misc/is-user-related.js';
-import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
+import { isQuotePacked, isRenotePacked } from '@/misc/is-renote.js';
+import { isChannelRelated } from '@/misc/is-channel-related.js';
import type { Packed } from '@/misc/json-schema.js';
import type { JsonObject, JsonValue } from '@/misc/json-value.js';
import type Connection from './Connection.js';
@@ -55,6 +56,10 @@ export default abstract class Channel {
return this.connection.followingChannels;
}
+ protected get mutingChannels() {
+ return this.connection.mutingChannels;
+ }
+
protected get subscriber() {
return this.connection.subscriber;
}
@@ -74,6 +79,9 @@ export default abstract class Channel {
// 流れてきたNoteがリノートをミュートしてるユーザが行ったもの
if (isRenotePacked(note) && !isQuotePacked(note) && this.userIdsWhoMeMutingRenotes.has(note.user.id)) return true;
+ // 流れてきたNoteがミュートしているチャンネルと関わる
+ if (isChannelRelated(note, this.mutingChannels)) return true;
+
return false;
}
diff --git a/packages/backend/src/server/api/stream/channels/channel.ts b/packages/backend/src/server/api/stream/channels/channel.ts
index ac79c31854..c07eaac98d 100644
--- a/packages/backend/src/server/api/stream/channels/channel.ts
+++ b/packages/backend/src/server/api/stream/channels/channel.ts
@@ -8,6 +8,8 @@ import type { Packed } from '@/misc/json-schema.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
+import { isInstanceMuted } from '@/misc/is-instance-muted.js';
+import { isUserRelated } from '@/misc/is-user-related.js';
import type { JsonObject } from '@/misc/json-value.js';
import Channel, { type MiChannelService } from '../channel.js';
@@ -19,7 +21,6 @@ class ChannelChannel extends Channel {
constructor(
private noteEntityService: NoteEntityService,
-
id: string,
connection: Channel['connection'],
) {
@@ -40,6 +41,10 @@ class ChannelChannel extends Channel {
private async onNote(note: Packed<'Note'>) {
if (note.channelId !== this.channelId) return;
+ if (note.user.requireSigninToViewContents && this.user == null) return;
+ if (note.renote && note.renote.user.requireSigninToViewContents && this.user == null) return;
+ if (note.reply && note.reply.user.requireSigninToViewContents && this.user == null) return;
+
if (this.isNoteMutedOrBlocked(note)) return;
if (this.user && isRenotePacked(note) && !isQuotePacked(note)) {
@@ -52,6 +57,35 @@ class ChannelChannel extends Channel {
this.send('note', note);
}
+ /*
+ * ミュートとブロックされてるを処理する
+ */
+ protected override isNoteMutedOrBlocked(note: Packed<'Note'>): boolean {
+ // 流れてきたNoteがインスタンスミュートしたインスタンスが関わる
+ if (isInstanceMuted(note, new Set(this.userProfile?.mutedInstances ?? []))) return true;
+
+ // 流れてきたNoteがミュートしているユーザーが関わる
+ if (isUserRelated(note, this.userIdsWhoMeMuting)) return true;
+ // 流れてきたNoteがブロックされているユーザーが関わる
+ if (isUserRelated(note, this.userIdsWhoBlockingMe)) return true;
+
+ // 流れてきたNoteがリノートをミュートしてるユーザが行ったもの
+ if (isRenotePacked(note) && !isQuotePacked(note) && this.userIdsWhoMeMutingRenotes.has(note.user.id)) return true;
+
+ // このソケットで見ているチャンネルがミュートされていたとしても、チャンネルを直接見ている以上は流すようにしたい
+ // ただし、他のミュートしているチャンネルは流さないようにもしたい
+ // ノート自体のチャンネルIDはonNoteでチェックしているので、ここではリノートのチャンネルIDをチェックする
+ if (
+ (note.renote) &&
+ (note.renote.channelId !== this.channelId) &&
+ (note.renote.channelId && this.mutingChannels.has(note.renote.channelId))
+ ) {
+ return true;
+ }
+
+ return false;
+ }
+
@bindThis
public dispose() {
// Unsubscribe events
diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts
index 157d9fc279..eb5b4a8c6c 100644
--- a/packages/backend/src/server/api/stream/channels/home-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts
@@ -44,7 +44,10 @@ class HomeTimelineChannel extends Channel {
if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return;
if (note.channelId) {
- if (!this.followingChannels.has(note.channelId)) return;
+ // そのチャンネルをフォローしていない
+ if (!this.followingChannels.has(note.channelId)) {
+ return;
+ }
} else {
// その投稿のユーザーをフォローしていなかったら弾く
if (!isMe && !Object.hasOwn(this.following, note.userId)) return;
diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
index db5b4576be..2155e02012 100644
--- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
@@ -53,16 +53,25 @@ class HybridTimelineChannel extends Channel {
if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return;
- // チャンネルの投稿ではなく、自分自身の投稿 または
- // チャンネルの投稿ではなく、その投稿のユーザーをフォローしている または
- // チャンネルの投稿ではなく、全体公開のローカルの投稿 または
- // フォローしているチャンネルの投稿 の場合だけ
- if (!(
- (note.channelId == null && isMe) ||
- (note.channelId == null && Object.hasOwn(this.following, note.userId)) ||
- (note.channelId == null && (note.user.host == null && note.visibility === 'public')) ||
- (note.channelId != null && this.followingChannels.has(note.channelId))
- )) return;
+ if (!note.channelId) {
+ // 以下の条件に該当するノートのみ後続処理に通す(ので、以下のif文は該当しないノートをすべて弾くようにする)
+ // - 自分自身の投稿
+ // - その投稿のユーザーをフォローしている
+ // - 全体公開のローカルの投稿
+ if (!(
+ isMe ||
+ Object.hasOwn(this.following, note.userId) ||
+ (note.user.host == null && note.visibility === 'public')
+ )) {
+ return;
+ }
+ } else {
+ // 以下の条件に該当するノートのみ後続処理に通す(ので、以下のif文は該当しないノートをすべて弾くようにする)
+ // - フォローしているチャンネルの投稿
+ if (!this.followingChannels.has(note.channelId)) {
+ return;
+ }
+ }
if (note.visibility === 'followers') {
if (!isMe && !Object.hasOwn(this.following, note.userId)) return;
diff --git a/packages/backend/src/server/oauth/OAuth2ProviderService.ts b/packages/backend/src/server/oauth/OAuth2ProviderService.ts
index cdd7102666..d2391c43ab 100644
--- a/packages/backend/src/server/oauth/OAuth2ProviderService.ts
+++ b/packages/backend/src/server/oauth/OAuth2ProviderService.ts
@@ -6,18 +6,15 @@
import dns from 'node:dns/promises';
import { fileURLToPath } from 'node:url';
import { Inject, Injectable } from '@nestjs/common';
-import { JSDOM } from 'jsdom';
+import * as htmlParser from 'node-html-parser';
import httpLinkHeader from 'http-link-header';
import ipaddr from 'ipaddr.js';
import oauth2orize, { type OAuth2, AuthorizationError, ValidateFunctionArity2, OAuth2Req, MiddlewareRequest } from 'oauth2orize';
import oauth2Pkce from 'oauth2orize-pkce';
import fastifyCors from '@fastify/cors';
-import fastifyView from '@fastify/view';
-import pug from 'pug';
import bodyParser from 'body-parser';
import fastifyExpress from '@fastify/express';
import { verifyChallenge } from 'pkce-challenge';
-import { mf2 } from 'microformats-parser';
import { permissions as kinds } from 'misskey-js';
import { secureRndstr } from '@/misc/secure-rndstr.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
@@ -32,6 +29,8 @@ import { MemoryKVCache } from '@/misc/cache.js';
import { LoggerService } from '@/core/LoggerService.js';
import Logger from '@/logger.js';
import { StatusError } from '@/misc/status-error.js';
+import { HtmlTemplateService } from '@/server/web/HtmlTemplateService.js';
+import { OAuthPage } from '@/server/web/views/oauth.js';
import type { ServerResponse } from 'node:http';
import type { FastifyInstance } from 'fastify';
@@ -98,6 +97,32 @@ interface ClientInformation {
logo: string | null;
}
+function parseMicroformats(doc: htmlParser.HTMLElement, baseUrl: string, id: string): { name: string | null; logo: string | null; } {
+ let name: string | null = null;
+ let logo: string | null = null;
+
+ const hApp = doc.querySelector('.h-app');
+ if (hApp == null) return { name, logo };
+
+ const nameEl = hApp.querySelector('.p-name');
+ if (nameEl != null) {
+ const href = nameEl.attributes.href || nameEl.attributes.src;
+ if (href != null && new URL(href, baseUrl).toString() === new URL(id).toString()) {
+ name = nameEl.textContent.trim();
+ }
+ }
+
+ const logoEl = hApp.querySelector('.u-logo');
+ if (logoEl != null) {
+ const href = logoEl.attributes.href || logoEl.attributes.src;
+ if (href != null) {
+ logo = new URL(href, baseUrl).toString();
+ }
+ }
+
+ return { name, logo };
+}
+
// https://indieauth.spec.indieweb.org/#client-information-discovery
// "Authorization servers SHOULD support parsing the [h-app] Microformat from the client_id,
// and if there is an [h-app] with a url property matching the client_id URL,
@@ -120,24 +145,19 @@ async function discoverClientInformation(logger: Logger, httpRequestService: Htt
}
const text = await res.text();
- const fragment = JSDOM.fragment(text);
+ const doc = htmlParser.parse(`${text}
`);
- redirectUris.push(...[...fragment.querySelectorAll('link[rel=redirect_uri][href]')].map(el => el.href));
+ redirectUris.push(...[...doc.querySelectorAll('link[rel=redirect_uri][href]')].map(el => el.attributes.href));
let name = id;
let logo: string | null = null;
if (text) {
- const microformats = mf2(text, { baseUrl: res.url });
- const correspondingProperties = microformats.items.find(item => item.type?.includes('h-app') && item.properties.url.includes(id));
- if (correspondingProperties) {
- const nameProperty = correspondingProperties.properties.name?.[0];
- if (typeof nameProperty === 'string') {
- name = nameProperty;
- }
- const logoProperty = correspondingProperties.properties.logo?.[0];
- if (typeof logoProperty === 'string') {
- logo = logoProperty;
- }
+ const microformats = parseMicroformats(doc, res.url, id);
+ if (typeof microformats.name === 'string') {
+ name = microformats.name;
+ }
+ if (typeof microformats.logo === 'string') {
+ logo = microformats.logo;
}
}
@@ -253,6 +273,7 @@ export class OAuth2ProviderService {
private usersRepository: UsersRepository,
private cacheService: CacheService,
loggerService: LoggerService,
+ private htmlTemplateService: HtmlTemplateService,
) {
this.#logger = loggerService.getLogger('oauth');
@@ -386,24 +407,16 @@ export class OAuth2ProviderService {
this.#logger.info(`Rendering authorization page for "${oauth2.client.name}"`);
reply.header('Cache-Control', 'no-store');
- return await reply.view('oauth', {
+ return await HtmlTemplateService.replyHtml(reply, OAuthPage({
+ ...await this.htmlTemplateService.getCommonData(),
transactionId: oauth2.transactionID,
clientName: oauth2.client.name,
- clientLogo: oauth2.client.logo,
- scope: oauth2.req.scope.join(' '),
- });
+ clientLogo: oauth2.client.logo ?? undefined,
+ scope: oauth2.req.scope,
+ }));
});
fastify.post('/decision', async () => { });
- fastify.register(fastifyView, {
- root: fileURLToPath(new URL('../web/views', import.meta.url)),
- engine: { pug },
- defaultContext: {
- version: this.config.version,
- config: this.config,
- },
- });
-
await fastify.register(fastifyExpress);
fastify.use('/authorize', this.#server.authorize(((areq, done) => {
(async (): Promise> => {
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index 3cd83efa1a..bcea935409 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -9,21 +9,16 @@ import { fileURLToPath } from 'node:url';
import { Inject, Injectable } from '@nestjs/common';
import ms from 'ms';
import sharp from 'sharp';
-import pug from 'pug';
import { In, IsNull } from 'typeorm';
import fastifyStatic from '@fastify/static';
-import fastifyView from '@fastify/view';
import fastifyProxy from '@fastify/http-proxy';
import vary from 'vary';
-import htmlSafeJsonStringify from 'htmlescape';
import type { Config } from '@/config.js';
-import { getNoteSummary } from '@/misc/get-note-summary.js';
import { DI } from '@/di-symbols.js';
import * as Acct from '@/misc/acct.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { PageEntityService } from '@/core/entities/PageEntityService.js';
-import { MetaEntityService } from '@/core/entities/MetaEntityService.js';
import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
import { ClipEntityService } from '@/core/entities/ClipEntityService.js';
import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js';
@@ -42,15 +37,34 @@ import type {
} from '@/models/_.js';
import type Logger from '@/logger.js';
import { handleRequestRedirectToOmitSearch } from '@/misc/fastify-hook-handlers.js';
+import { htmlSafeJsonStringify } from '@/misc/json-stringify-html-safe.js';
import { bindThis } from '@/decorators.js';
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
-import { RoleService } from '@/core/RoleService.js';
import { ReversiGameEntityService } from '@/core/entities/ReversiGameEntityService.js';
import { AnnouncementEntityService } from '@/core/entities/AnnouncementEntityService.js';
import { FeedService } from './FeedService.js';
import { UrlPreviewService } from './UrlPreviewService.js';
import { ClientLoggerService } from './ClientLoggerService.js';
-import type { FastifyInstance, FastifyPluginOptions, FastifyReply } from 'fastify';
+import { HtmlTemplateService } from './HtmlTemplateService.js';
+
+import { BasePage } from './views/base.js';
+import { UserPage } from './views/user.js';
+import { NotePage } from './views/note.js';
+import { PagePage } from './views/page.js';
+import { ClipPage } from './views/clip.js';
+import { FlashPage } from './views/flash.js';
+import { GalleryPostPage } from './views/gallery-post.js';
+import { ChannelPage } from './views/channel.js';
+import { ReversiGamePage } from './views/reversi-game.js';
+import { AnnouncementPage } from './views/announcement.js';
+import { BaseEmbed } from './views/base-embed.js';
+import { InfoCardPage } from './views/info-card.js';
+import { BiosPage } from './views/bios.js';
+import { CliPage } from './views/cli.js';
+import { FlushPage } from './views/flush.js';
+import { ErrorPage } from './views/error.js';
+
+import type { FastifyError, FastifyInstance, FastifyPluginOptions, FastifyReply } from 'fastify';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
@@ -108,7 +122,6 @@ export class ClientServerService {
private userEntityService: UserEntityService,
private noteEntityService: NoteEntityService,
private pageEntityService: PageEntityService,
- private metaEntityService: MetaEntityService,
private galleryPostEntityService: GalleryPostEntityService,
private clipEntityService: ClipEntityService,
private channelEntityService: ChannelEntityService,
@@ -116,7 +129,7 @@ export class ClientServerService {
private announcementEntityService: AnnouncementEntityService,
private urlPreviewService: UrlPreviewService,
private feedService: FeedService,
- private roleService: RoleService,
+ private htmlTemplateService: HtmlTemplateService,
private clientLoggerService: ClientLoggerService,
) {
//this.createServer = this.createServer.bind(this);
@@ -182,38 +195,10 @@ export class ClientServerService {
return (manifest);
}
- @bindThis
- private async generateCommonPugData(meta: MiMeta) {
- return {
- instanceName: meta.name ?? 'Misskey',
- icon: meta.iconUrl,
- appleTouchIcon: meta.app512IconUrl,
- themeColor: meta.themeColor,
- serverErrorImageUrl: meta.serverErrorImageUrl ?? 'https://xn--931a.moe/assets/error.jpg',
- infoImageUrl: meta.infoImageUrl ?? 'https://xn--931a.moe/assets/info.jpg',
- notFoundImageUrl: meta.notFoundImageUrl ?? 'https://xn--931a.moe/assets/not-found.jpg',
- instanceUrl: this.config.url,
- metaJson: htmlSafeJsonStringify(await this.metaEntityService.packDetailed(meta)),
- now: Date.now(),
- federationEnabled: this.meta.federation !== 'none',
- };
- }
-
@bindThis
public createServer(fastify: FastifyInstance, options: FastifyPluginOptions, done: (err?: Error) => void) {
const configUrl = new URL(this.config.url);
- fastify.register(fastifyView, {
- root: _dirname + '/views',
- engine: {
- pug: pug,
- },
- defaultContext: {
- version: this.config.version,
- config: this.config,
- },
- });
-
fastify.addHook('onRequest', (request, reply, done) => {
// クリックジャッキング防止のためiFrameの中に入れられないようにする
reply.header('X-Frame-Options', 'DENY');
@@ -414,16 +399,15 @@ export class ClientServerService {
//#endregion
- const renderBase = async (reply: FastifyReply, data: { [key: string]: any } = {}) => {
+ const renderBase = async (reply: FastifyReply, data: Partial[0]> = {}) => {
reply.header('Cache-Control', 'public, max-age=30');
- return await reply.view('base', {
- img: this.meta.bannerUrl,
- url: this.config.url,
+ return await HtmlTemplateService.replyHtml(reply, BasePage({
+ img: this.meta.bannerUrl ?? undefined,
title: this.meta.name ?? 'Misskey',
- desc: this.meta.description,
- ...await this.generateCommonPugData(this.meta),
+ desc: this.meta.description ?? undefined,
+ ...await this.htmlTemplateService.getCommonData(),
...data,
- });
+ }));
};
// URL preview endpoint
@@ -505,11 +489,6 @@ export class ClientServerService {
)
) {
const profile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id });
- const me = profile.fields
- ? profile.fields
- .filter(filed => filed.value != null && filed.value.match(/^https?:/))
- .map(field => field.value)
- : [];
reply.header('Cache-Control', 'public, max-age=15');
if (profile.preventAiLearning) {
@@ -522,15 +501,15 @@ export class ClientServerService {
userProfile: profile,
});
- return await reply.view('user', {
- user, profile, me,
- avatarUrl: _user.avatarUrl,
+ return await HtmlTemplateService.replyHtml(reply, UserPage({
+ user: _user,
+ profile,
sub: request.params.sub,
- ...await this.generateCommonPugData(this.meta),
- clientCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ clientCtxJson: htmlSafeJsonStringify({
user: _user,
}),
- });
+ }));
} else {
// リモートユーザーなので
// モデレータがAPI経由で参照可能にするために404にはしない
@@ -581,17 +560,14 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('note', {
+ return await HtmlTemplateService.replyHtml(reply, NotePage({
note: _note,
profile,
- avatarUrl: _note.user.avatarUrl,
- // TODO: Let locale changeable by instance setting
- summary: getNoteSummary(_note),
- ...await this.generateCommonPugData(this.meta),
- clientCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ clientCtxJson: htmlSafeJsonStringify({
note: _note,
}),
- });
+ }));
} else {
return await renderBase(reply);
}
@@ -624,12 +600,11 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('page', {
+ return await HtmlTemplateService.replyHtml(reply, PagePage({
page: _page,
profile,
- avatarUrl: _page.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -649,12 +624,11 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('flash', {
+ return await HtmlTemplateService.replyHtml(reply, FlashPage({
flash: _flash,
profile,
- avatarUrl: _flash.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -674,15 +648,14 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('clip', {
+ return await HtmlTemplateService.replyHtml(reply, ClipPage({
clip: _clip,
profile,
- avatarUrl: _clip.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- clientCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ clientCtxJson: htmlSafeJsonStringify({
clip: _clip,
}),
- });
+ }));
} else {
return await renderBase(reply);
}
@@ -700,12 +673,11 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('gallery-post', {
- post: _post,
+ return await HtmlTemplateService.replyHtml(reply, GalleryPostPage({
+ galleryPost: _post,
profile,
- avatarUrl: _post.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -720,10 +692,10 @@ export class ClientServerService {
if (channel) {
const _channel = await this.channelEntityService.pack(channel);
reply.header('Cache-Control', 'public, max-age=15');
- return await reply.view('channel', {
+ return await HtmlTemplateService.replyHtml(reply, ChannelPage({
channel: _channel,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -738,10 +710,10 @@ export class ClientServerService {
if (game) {
const _game = await this.reversiGameEntityService.packDetail(game);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('reversi-game', {
- game: _game,
- ...await this.generateCommonPugData(this.meta),
- });
+ return await HtmlTemplateService.replyHtml(reply, ReversiGamePage({
+ reversiGame: _game,
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -757,10 +729,10 @@ export class ClientServerService {
if (announcement) {
const _announcement = await this.announcementEntityService.pack(announcement);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('announcement', {
+ return await HtmlTemplateService.replyHtml(reply, AnnouncementPage({
announcement: _announcement,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -793,13 +765,13 @@ export class ClientServerService {
const _user = await this.userEntityService.pack(user);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- embedCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ embedCtxJson: htmlSafeJsonStringify({
user: _user,
}),
- });
+ }));
});
fastify.get<{ Params: { note: string; } }>('/embed/notes/:note', async (request, reply) => {
@@ -819,13 +791,13 @@ export class ClientServerService {
const _note = await this.noteEntityService.pack(note, null, { detail: true });
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- embedCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ embedCtxJson: htmlSafeJsonStringify({
note: _note,
}),
- });
+ }));
});
fastify.get<{ Params: { clip: string; } }>('/embed/clips/:clip', async (request, reply) => {
@@ -840,48 +812,46 @@ export class ClientServerService {
const _clip = await this.clipEntityService.pack(clip);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- embedCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ embedCtxJson: htmlSafeJsonStringify({
clip: _clip,
}),
- });
+ }));
});
fastify.get('/embed/*', async (request, reply) => {
reply.removeHeader('X-Frame-Options');
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
});
fastify.get('/_info_card_', async (request, reply) => {
reply.removeHeader('X-Frame-Options');
- return await reply.view('info-card', {
+ return await HtmlTemplateService.replyHtml(reply, InfoCardPage({
version: this.config.version,
- host: this.config.host,
+ config: this.config,
meta: this.meta,
- originalUsersCount: await this.usersRepository.countBy({ host: IsNull() }),
- originalNotesCount: await this.notesRepository.countBy({ userHost: IsNull() }),
- });
+ }));
});
//#endregion
fastify.get('/bios', async (request, reply) => {
- return await reply.view('bios', {
+ return await HtmlTemplateService.replyHtml(reply, BiosPage({
version: this.config.version,
- });
+ }));
});
fastify.get('/cli', async (request, reply) => {
- return await reply.view('cli', {
+ return await HtmlTemplateService.replyHtml(reply, CliPage({
version: this.config.version,
- });
+ }));
});
const override = (source: string, target: string, depth = 0) =>
@@ -904,7 +874,7 @@ export class ClientServerService {
reply.header('Clear-Site-Data', '"*"');
}
reply.header('Set-Cookie', 'http-flush-failed=1; Path=/flush; Max-Age=60');
- return await reply.view('flush');
+ return await HtmlTemplateService.replyHtml(reply, FlushPage());
});
// streamingに非WebSocketリクエストが来た場合にbase htmlをキャシュ付きで返すと、Proxy等でそのパスがキャッシュされておかしくなる
@@ -918,7 +888,7 @@ export class ClientServerService {
return await renderBase(reply);
});
- fastify.setErrorHandler(async (error, request, reply) => {
+ fastify.setErrorHandler(async (error, request, reply) => {
const errId = randomUUID();
this.clientLoggerService.logger.error(`Internal error occurred in ${request.routeOptions.url}: ${error.message}`, {
path: request.routeOptions.url,
@@ -930,10 +900,10 @@ export class ClientServerService {
});
reply.code(500);
reply.header('Cache-Control', 'max-age=10, must-revalidate');
- return await reply.view('error', {
+ return await HtmlTemplateService.replyHtml(reply, ErrorPage({
code: error.code,
id: errId,
- });
+ }));
});
done();
diff --git a/packages/backend/src/server/web/HtmlTemplateService.ts b/packages/backend/src/server/web/HtmlTemplateService.ts
new file mode 100644
index 0000000000..8ff985530d
--- /dev/null
+++ b/packages/backend/src/server/web/HtmlTemplateService.ts
@@ -0,0 +1,105 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { dirname } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { promises as fsp } from 'node:fs';
+import { languages } from 'i18n/const';
+import { Injectable, Inject } from '@nestjs/common';
+import { DI } from '@/di-symbols.js';
+import { bindThis } from '@/decorators.js';
+import { htmlSafeJsonStringify } from '@/misc/json-stringify-html-safe.js';
+import { MetaEntityService } from '@/core/entities/MetaEntityService.js';
+import type { FastifyReply } from 'fastify';
+import type { Config } from '@/config.js';
+import type { MiMeta } from '@/models/Meta.js';
+import type { CommonData } from './views/_.js';
+
+const _filename = fileURLToPath(import.meta.url);
+const _dirname = dirname(_filename);
+
+const frontendVitePublic = `${_dirname}/../../../../frontend/public/`;
+const frontendEmbedVitePublic = `${_dirname}/../../../../frontend-embed/public/`;
+
+@Injectable()
+export class HtmlTemplateService {
+ private frontendBootloadersFetched = false;
+ public frontendBootloaderJs: string | null = null;
+ public frontendBootloaderCss: string | null = null;
+ public frontendEmbedBootloaderJs: string | null = null;
+ public frontendEmbedBootloaderCss: string | null = null;
+
+ constructor(
+ @Inject(DI.config)
+ private config: Config,
+
+ @Inject(DI.meta)
+ private meta: MiMeta,
+
+ private metaEntityService: MetaEntityService,
+ ) {
+ }
+
+ @bindThis
+ private async prepareFrontendBootloaders() {
+ if (this.frontendBootloadersFetched) return;
+ this.frontendBootloadersFetched = true;
+
+ const [bootJs, bootCss, embedBootJs, embedBootCss] = await Promise.all([
+ fsp.readFile(`${frontendVitePublic}loader/boot.js`, 'utf-8').catch(() => null),
+ fsp.readFile(`${frontendVitePublic}loader/style.css`, 'utf-8').catch(() => null),
+ fsp.readFile(`${frontendEmbedVitePublic}loader/boot.js`, 'utf-8').catch(() => null),
+ fsp.readFile(`${frontendEmbedVitePublic}loader/style.css`, 'utf-8').catch(() => null),
+ ]);
+
+ if (bootJs != null) {
+ this.frontendBootloaderJs = bootJs;
+ }
+
+ if (bootCss != null) {
+ this.frontendBootloaderCss = bootCss;
+ }
+
+ if (embedBootJs != null) {
+ this.frontendEmbedBootloaderJs = embedBootJs;
+ }
+
+ if (embedBootCss != null) {
+ this.frontendEmbedBootloaderCss = embedBootCss;
+ }
+ }
+
+ @bindThis
+ public async getCommonData(): Promise {
+ await this.prepareFrontendBootloaders();
+
+ return {
+ version: this.config.version,
+ config: this.config,
+ langs: [...languages],
+ instanceName: this.meta.name ?? 'Misskey',
+ icon: this.meta.iconUrl,
+ appleTouchIcon: this.meta.app512IconUrl,
+ themeColor: this.meta.themeColor,
+ serverErrorImageUrl: this.meta.serverErrorImageUrl ?? 'https://xn--931a.moe/assets/error.jpg',
+ infoImageUrl: this.meta.infoImageUrl ?? 'https://xn--931a.moe/assets/info.jpg',
+ notFoundImageUrl: this.meta.notFoundImageUrl ?? 'https://xn--931a.moe/assets/not-found.jpg',
+ instanceUrl: this.config.url,
+ metaJson: htmlSafeJsonStringify(await this.metaEntityService.packDetailed(this.meta)),
+ now: Date.now(),
+ federationEnabled: this.meta.federation !== 'none',
+ frontendBootloaderJs: this.frontendBootloaderJs,
+ frontendBootloaderCss: this.frontendBootloaderCss,
+ frontendEmbedBootloaderJs: this.frontendEmbedBootloaderJs,
+ frontendEmbedBootloaderCss: this.frontendEmbedBootloaderCss,
+ };
+ }
+
+ public static async replyHtml(reply: FastifyReply, html: string | Promise) {
+ reply.header('Content-Type', 'text/html; charset=utf-8');
+ const _html = await html;
+ return reply.send(_html);
+ }
+}
diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts
index b9a4015031..bd1dbb430c 100644
--- a/packages/backend/src/server/web/UrlPreviewService.ts
+++ b/packages/backend/src/server/web/UrlPreviewService.ts
@@ -4,8 +4,7 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import { summaly } from '@misskey-dev/summaly';
-import { SummalyResult } from '@misskey-dev/summaly/built/summary.js';
+import type { SummalyResult } from '@misskey-dev/summaly/built/summary.js';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
@@ -113,7 +112,7 @@ export class UrlPreviewService {
}
}
- private fetchSummary(url: string, meta: MiMeta, lang?: string): Promise {
+ private async fetchSummary(url: string, meta: MiMeta, lang?: string): Promise {
const agent = this.config.proxy
? {
http: this.httpRequestService.httpAgent,
@@ -121,6 +120,8 @@ export class UrlPreviewService {
}
: undefined;
+ const { summaly } = await import('@misskey-dev/summaly');
+
return summaly(url, {
followRedirects: this.meta.urlPreviewAllowRedirect,
lang: lang ?? 'ja-JP',
diff --git a/packages/backend/src/server/web/views/_.ts b/packages/backend/src/server/web/views/_.ts
new file mode 100644
index 0000000000..ac7418f362
--- /dev/null
+++ b/packages/backend/src/server/web/views/_.ts
@@ -0,0 +1,49 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Config } from '@/config.js';
+
+export const comment = ``;
+
+export const defaultDescription = '✨🌎✨ A interplanetary communication platform ✨🚀✨';
+
+export type MinimumCommonData = {
+ version: string;
+ config: Config;
+};
+
+export type CommonData = MinimumCommonData & {
+ langs: string[];
+ instanceName: string;
+ icon: string | null;
+ appleTouchIcon: string | null;
+ themeColor: string | null;
+ serverErrorImageUrl: string;
+ infoImageUrl: string;
+ notFoundImageUrl: string;
+ instanceUrl: string;
+ now: number;
+ federationEnabled: boolean;
+ frontendBootloaderJs: string | null;
+ frontendBootloaderCss: string | null;
+ frontendEmbedBootloaderJs: string | null;
+ frontendEmbedBootloaderCss: string | null;
+ metaJson?: string;
+ clientCtxJson?: string;
+};
+
+export type CommonPropsMinimum> = MinimumCommonData & T;
+
+export type CommonProps> = CommonData & T;
diff --git a/packages/backend/src/server/web/views/_splash.tsx b/packages/backend/src/server/web/views/_splash.tsx
new file mode 100644
index 0000000000..ea79b8d61d
--- /dev/null
+++ b/packages/backend/src/server/web/views/_splash.tsx
@@ -0,0 +1,26 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function Splash(props: {
+ icon?: string | null;
+}) {
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/announcement.pug b/packages/backend/src/server/web/views/announcement.pug
deleted file mode 100644
index 7a4052e8a4..0000000000
--- a/packages/backend/src/server/web/views/announcement.pug
+++ /dev/null
@@ -1,21 +0,0 @@
-extends ./base
-
-block vars
- - const title = announcement.title;
- - const description = announcement.text.length > 100 ? announcement.text.slice(0, 100) + '…' : announcement.text;
- - const url = `${config.url}/announcements/${announcement.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content=description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= description)
- meta(property='og:url' content= url)
- if announcement.imageUrl
- meta(property='og:image' content=announcement.imageUrl)
- meta(property='twitter:card' content='summary_large_image')
diff --git a/packages/backend/src/server/web/views/announcement.tsx b/packages/backend/src/server/web/views/announcement.tsx
new file mode 100644
index 0000000000..bc1c808177
--- /dev/null
+++ b/packages/backend/src/server/web/views/announcement.tsx
@@ -0,0 +1,41 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function AnnouncementPage(props: CommonProps<{
+ announcement: Packed<'Announcement'>;
+}>) {
+ const description = props.announcement.text.length > 100 ? props.announcement.text.slice(0, 100) + '…' : props.announcement.text;
+
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+ {props.announcement.imageUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/base-embed.pug b/packages/backend/src/server/web/views/base-embed.pug
deleted file mode 100644
index 29de86b8b6..0000000000
--- a/packages/backend/src/server/web/views/base-embed.pug
+++ /dev/null
@@ -1,71 +0,0 @@
-block vars
-
-block loadClientEntry
- - const entry = config.frontendEmbedEntry;
-
-doctype html
-
-html(class='embed')
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- meta(name='referrer' content='origin')
- meta(name='theme-color' content= themeColor || '#86b300')
- meta(name='theme-color-orig' content= themeColor || '#86b300')
- meta(property='og:site_name' content= instanceName || 'Misskey')
- meta(property='instance_url' content= instanceUrl)
- meta(name='viewport' content='width=device-width, initial-scale=1')
- meta(name='format-detection' content='telephone=no,date=no,address=no,email=no,url=no')
- link(rel='icon' href= icon || '/favicon.ico')
- link(rel='apple-touch-icon' href= appleTouchIcon || '/apple-touch-icon.png')
-
- if !config.frontendEmbedManifestExists
- script(type="module" src="/embed_vite/@vite/client")
-
- if Array.isArray(entry.css)
- each href in entry.css
- link(rel='stylesheet' href=`/embed_vite/${href}`)
-
- title
- block title
- = title || 'Misskey'
-
- block meta
- meta(name='robots' content='noindex')
-
- style
- include ../style.embed.css
-
- script.
- var VERSION = "#{version}";
- var CLIENT_ENTRY = !{JSON.stringify(entry.file)};
-
- script(type='application/json' id='misskey_meta' data-generated-at=now)
- != metaJson
-
- script(type='application/json' id='misskey_embedCtx' data-generated-at=now)
- != embedCtx
-
- script
- include ../boot.embed.js
-
- body
- noscript: p
- | JavaScriptを有効にしてください
- br
- | Please turn on your JavaScript
- div#splash
- img#splashIcon(src= icon || '/static-assets/splash.png')
- div#splashSpinner
-
-
-
-
-
-
-
-
-
-
- block content
diff --git a/packages/backend/src/server/web/views/base-embed.tsx b/packages/backend/src/server/web/views/base-embed.tsx
new file mode 100644
index 0000000000..011b66592e
--- /dev/null
+++ b/packages/backend/src/server/web/views/base-embed.tsx
@@ -0,0 +1,88 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment } from '@/server/web/views/_.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Splash } from '@/server/web/views/_splash.js';
+import type { PropsWithChildren, Children } from '@kitajs/html';
+
+export function BaseEmbed(props: PropsWithChildren>) {
+ const now = Date.now();
+
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeMetaJson = props.metaJson;
+ const safeEmbedCtxJson = props.embedCtxJson;
+
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {!props.config.frontendEmbedManifestExists ? : null}
+
+ {props.config.frontendEmbedEntry.css != null ? props.config.frontendEmbedEntry.css.map((href) => (
+
+ )) : null}
+
+ {props.titleSlot ?? {props.title || 'Misskey'} }
+
+ {props.metaSlot}
+
+
+
+ {props.frontendEmbedBootloaderCss != null ? : }
+
+
+
+ {safeMetaJson != null ? : null}
+ {safeEmbedCtxJson != null ? : null}
+
+ {props.frontendEmbedBootloaderJs != null ? : }
+
+
+
+
+ JavaScriptを有効にしてください
+ Please turn on your JavaScript
+
+
+
+ {props.children}
+
+
+ >
+ );
+}
+
diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug
deleted file mode 100644
index a76c75fe5c..0000000000
--- a/packages/backend/src/server/web/views/base.pug
+++ /dev/null
@@ -1,100 +0,0 @@
-block vars
-
-block loadClientEntry
- - const entry = config.frontendEntry;
- - const baseUrl = config.url;
-
-doctype html
-
-//
- -
- _____ _ _
- | |_|___ ___| |_ ___ _ _
- | | | | |_ -|_ -| '_| -_| | |
- |_|_|_|_|___|___|_,_|___|_ |
- |___|
- Thank you for using Misskey!
- If you are reading this message... how about joining the development?
- https://github.com/misskey-dev/misskey
-
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- meta(name='referrer' content='origin')
- meta(name='theme-color' content= themeColor || '#86b300')
- meta(name='theme-color-orig' content= themeColor || '#86b300')
- meta(property='og:site_name' content= instanceName || 'Misskey')
- meta(property='instance_url' content= instanceUrl)
- meta(name='viewport' content='width=device-width, initial-scale=1')
- meta(name='format-detection' content='telephone=no,date=no,address=no,email=no,url=no')
- link(rel='icon' href= icon || '/favicon.ico')
- link(rel='apple-touch-icon' href= appleTouchIcon || '/apple-touch-icon.png')
- link(rel='manifest' href='/manifest.json')
- link(rel='search' type='application/opensearchdescription+xml' title=(title || "Misskey") href=`${baseUrl}/opensearch.xml`)
- link(rel='prefetch' href=serverErrorImageUrl)
- link(rel='prefetch' href=infoImageUrl)
- link(rel='prefetch' href=notFoundImageUrl)
-
- if !config.frontendManifestExists
- script(type="module" src="/vite/@vite/client")
-
- if Array.isArray(entry.css)
- each href in entry.css
- link(rel='stylesheet' href=`/vite/${href}`)
-
- title
- block title
- = title || 'Misskey'
-
- if noindex
- meta(name='robots' content='noindex')
-
- block desc
- meta(name='description' content= desc || '✨🌎✨ A interplanetary communication platform ✨🚀✨')
-
- block meta
-
- block og
- meta(property='og:title' content= title || 'Misskey')
- meta(property='og:description' content= desc || '✨🌎✨ A interplanetary communication platform ✨🚀✨')
- meta(property='og:image' content= img)
- meta(property='twitter:card' content='summary')
-
- style
- include ../style.css
-
- script.
- var VERSION = "#{version}";
- var CLIENT_ENTRY = !{JSON.stringify(entry.file)};
-
- script(type='application/json' id='misskey_meta' data-generated-at=now)
- != metaJson
-
- script(type='application/json' id='misskey_clientCtx' data-generated-at=now)
- != clientCtx
-
- script
- include ../boot.js
-
- body
- noscript: p
- | JavaScriptを有効にしてください
- br
- | Please turn on your JavaScript
- div#splash
- img#splashIcon(src= icon || '/static-assets/splash.png')
- div#splashSpinner
-
-
-
-
-
-
-
-
-
-
- block content
diff --git a/packages/backend/src/server/web/views/base.tsx b/packages/backend/src/server/web/views/base.tsx
new file mode 100644
index 0000000000..6fa3395fb8
--- /dev/null
+++ b/packages/backend/src/server/web/views/base.tsx
@@ -0,0 +1,108 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment, defaultDescription } from '@/server/web/views/_.js';
+import { Splash } from '@/server/web/views/_splash.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import type { PropsWithChildren, Children } from '@kitajs/html';
+
+export function Layout(props: PropsWithChildren>) {
+ const now = Date.now();
+
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeMetaJson = props.metaJson;
+ const safeClientCtxJson = props.clientCtxJson;
+
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {props.serverErrorImageUrl != null ? : null}
+ {props.infoImageUrl != null ? : null}
+ {props.notFoundImageUrl != null ? : null}
+
+ {!props.config.frontendManifestExists ? : null}
+
+ {props.config.frontendEntry.css != null ? props.config.frontendEntry.css.map((href) => (
+
+ )) : null}
+
+ {props.titleSlot ?? {props.title || 'Misskey'} }
+
+ {props.noindex ? : null}
+
+ {props.descSlot ?? (props.desc != null ? : null)}
+
+ {props.metaSlot}
+
+ {props.ogSlot ?? (
+ <>
+
+
+ {props.img != null ? : null}
+
+ >
+ )}
+
+ {props.frontendBootloaderCss != null ? : }
+
+
+
+ {safeMetaJson != null ? : null}
+ {safeClientCtxJson != null ? : null}
+
+ {props.frontendBootloaderJs != null ? : }
+
+
+
+
+ JavaScriptを有効にしてください
+ Please turn on your JavaScript
+
+
+
+ {props.children}
+
+
+ >
+ );
+}
+
+export { Layout as BasePage };
+
diff --git a/packages/backend/src/server/web/views/bios.pug b/packages/backend/src/server/web/views/bios.pug
deleted file mode 100644
index 39a151a29b..0000000000
--- a/packages/backend/src/server/web/views/bios.pug
+++ /dev/null
@@ -1,20 +0,0 @@
-doctype html
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- title Misskey Repair Tool
- style
- include ../bios.css
- script
- include ../bios.js
-
- body
- header
- h1 Misskey Repair Tool #{version}
- main
- div.tabs
- button#ls edit local storage
- div#content
diff --git a/packages/backend/src/server/web/views/bios.tsx b/packages/backend/src/server/web/views/bios.tsx
new file mode 100644
index 0000000000..9010de8d75
--- /dev/null
+++ b/packages/backend/src/server/web/views/bios.tsx
@@ -0,0 +1,35 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function BiosPage(props: {
+ version: string;
+}) {
+ return (
+ <>
+ {''}
+
+
+
+
+ Misskey Repair Tool
+
+
+
+
+
+ Misskey Repair Tool {props.version}
+
+
+
+ edit local storage
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/channel.pug b/packages/backend/src/server/web/views/channel.pug
deleted file mode 100644
index c514025e0b..0000000000
--- a/packages/backend/src/server/web/views/channel.pug
+++ /dev/null
@@ -1,19 +0,0 @@
-extends ./base
-
-block vars
- - const title = channel.name;
- - const url = `${config.url}/channels/${channel.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= channel.description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= channel.description)
- meta(property='og:url' content= url)
- meta(property='og:image' content= channel.bannerUrl)
- meta(property='twitter:card' content='summary')
diff --git a/packages/backend/src/server/web/views/channel.tsx b/packages/backend/src/server/web/views/channel.tsx
new file mode 100644
index 0000000000..7d8123ea85
--- /dev/null
+++ b/packages/backend/src/server/web/views/channel.tsx
@@ -0,0 +1,40 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function ChannelPage(props: CommonProps<{
+ channel: Packed<'Channel'>;
+}>) {
+
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.channel.description != null ? : null}
+
+ {props.channel.bannerUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/cli.pug b/packages/backend/src/server/web/views/cli.pug
deleted file mode 100644
index d2cf7c4335..0000000000
--- a/packages/backend/src/server/web/views/cli.pug
+++ /dev/null
@@ -1,21 +0,0 @@
-doctype html
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- title Misskey Cli
- style
- include ../cli.css
- script
- include ../cli.js
-
- body
- header
- h1 Misskey Cli #{version}
- main
- div#form
- textarea#text
- button#submit submit
- div#tl
diff --git a/packages/backend/src/server/web/views/cli.tsx b/packages/backend/src/server/web/views/cli.tsx
new file mode 100644
index 0000000000..009d982b35
--- /dev/null
+++ b/packages/backend/src/server/web/views/cli.tsx
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function CliPage(props: {
+ version: string;
+}) {
+ return (
+ <>
+ {''}
+
+
+
+
+ Misskey CLI Tool
+
+
+
+
+
+
+ Misskey CLI {props.version}
+
+
+
+
+ Submit
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/clip.pug b/packages/backend/src/server/web/views/clip.pug
deleted file mode 100644
index 5a0018803a..0000000000
--- a/packages/backend/src/server/web/views/clip.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-extends ./base
-
-block vars
- - const user = clip.user;
- - const title = clip.name;
- - const url = `${config.url}/clips/${clip.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= clip.description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= clip.description)
- meta(property='og:url' content= url)
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
-
-block meta
- if profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:clip-id' content=clip.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
diff --git a/packages/backend/src/server/web/views/clip.tsx b/packages/backend/src/server/web/views/clip.tsx
new file mode 100644
index 0000000000..c3cc505e35
--- /dev/null
+++ b/packages/backend/src/server/web/views/clip.tsx
@@ -0,0 +1,59 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function ClipPage(props: CommonProps<{
+ clip: Packed<'Clip'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.clip.description != null ? : null}
+
+ {props.clip.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/error.pug b/packages/backend/src/server/web/views/error.pug
deleted file mode 100644
index 6a78d1878c..0000000000
--- a/packages/backend/src/server/web/views/error.pug
+++ /dev/null
@@ -1,71 +0,0 @@
-doctype html
-
-//
- -
- _____ _ _
- | |_|___ ___| |_ ___ _ _
- | | | | |_ -|_ -| '_| -_| | |
- |_|_|_|_|___|___|_,_|___|_ |
- |___|
- Thank you for using Misskey!
- If you are reading this message... how about joining the development?
- https://github.com/misskey-dev/misskey
-
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='viewport' content='width=device-width, initial-scale=1')
- meta(name='application-name' content='Misskey')
- meta(name='referrer' content='origin')
-
- title
- block title
- = 'An error has occurred... | Misskey'
-
- style
- include ../error.css
-
- script
- include ../error.js
-
-body
- svg.icon-warning(xmlns="http://www.w3.org/2000/svg", viewBox="0 0 24 24", stroke-width="2", stroke="currentColor", fill="none", stroke-linecap="round", stroke-linejoin="round")
- path(stroke="none", d="M0 0h24v24H0z", fill="none")
- path(d="M12 9v2m0 4v.01")
- path(d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75")
-
- h1(data-i18n="title") Failed to initialize Misskey
-
- button.button-big(onclick="location.reload();")
- span.button-label-big(data-i18n-reload) Reload
-
- p(data-i18n="serverError") If reloading after a period of time does not resolve the problem, contact the server administrator with the following ERROR ID.
-
- div#errors
- code.
- ERROR CODE: #{code}
- ERROR ID: #{id}
-
- p
- b(data-i18n="solution") The following actions may solve the problem.
-
- p(data-i18n="solution1") Update your os and browser
- p(data-i18n="solution2") Disable an adblocker
- p(data-i18n="solution3") Clear your browser cache
- p(data-i18n="solution4") (Tor Browser) Set dom.webaudio.enabled to true
-
- details(style="color: #86b300;")
- summary(data-i18n="otherOption") Other options
- a(href="/flush")
- button.button-small
- span.button-label-small(data-i18n="otherOption1") Clear preferences and cache
- br
- a(href="/cli")
- button.button-small
- span.button-label-small(data-i18n="otherOption2") Start the simple client
- br
- a(href="/bios")
- button.button-small
- span.button-label-small(data-i18n="otherOption3") Start the repair tool
diff --git a/packages/backend/src/server/web/views/error.tsx b/packages/backend/src/server/web/views/error.tsx
new file mode 100644
index 0000000000..9d0e60aa30
--- /dev/null
+++ b/packages/backend/src/server/web/views/error.tsx
@@ -0,0 +1,89 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment } from '@/server/web/views/_.js';
+import type { CommonPropsMinimum } from '@/server/web/views/_.js';
+
+export function ErrorPage(props: {
+ title?: string;
+ code: string;
+ id: string;
+}) {
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+
+ {props.title ?? 'An error has occurred... | Misskey'}
+
+
+
+
+
+
+
+
+
+ Failed to initialize Misskey
+
+
+ Reload
+
+
+
+ If reloading after a period of time does not resolve the problem, contact the server administrator with the following ERROR ID.
+
+
+
+
+ ERROR CODE: {props.code}
+ ERROR ID: {props.id}
+
+
+
+ The following actions may solve the problem.
+
+ Update your os and browser
+ Disable an adblocker
+ Clear your browser cache
+ (Tor Browser) Set dom.webaudio.enabled to true
+
+
+ Other options
+
+
+ Clear preferences and cache
+
+
+
+
+ Start the simple client
+
+
+
+
+ Start the repair tool
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/flash.pug b/packages/backend/src/server/web/views/flash.pug
deleted file mode 100644
index 1549aa7906..0000000000
--- a/packages/backend/src/server/web/views/flash.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-extends ./base
-
-block vars
- - const user = flash.user;
- - const title = flash.title;
- - const url = `${config.url}/play/${flash.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= flash.summary)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= flash.summary)
- meta(property='og:url' content= url)
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
-
-block meta
- if profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:flash-id' content=flash.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
diff --git a/packages/backend/src/server/web/views/flash.tsx b/packages/backend/src/server/web/views/flash.tsx
new file mode 100644
index 0000000000..25a6b2c0ae
--- /dev/null
+++ b/packages/backend/src/server/web/views/flash.tsx
@@ -0,0 +1,59 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function FlashPage(props: CommonProps<{
+ flash: Packed<'Flash'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+ {props.flash.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/flush.pug b/packages/backend/src/server/web/views/flush.pug
deleted file mode 100644
index 7884495d08..0000000000
--- a/packages/backend/src/server/web/views/flush.pug
+++ /dev/null
@@ -1,51 +0,0 @@
-doctype html
-
-html
- #msg
- script.
- const msg = document.getElementById('msg');
- const successText = `\nSuccess Flush! Back to Misskey \n成功しました。Misskeyを開き直してください。 `;
-
- if (!document.cookie) {
- message('Your site data is fully cleared by your browser.');
- message(successText);
- } else {
- message('Your browser does not support Clear-Site-Data header. Start opportunistic flushing.');
- (async function() {
- try {
- localStorage.clear();
- message('localStorage cleared.');
-
- const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
- const delidb = indexedDB.deleteDatabase(name);
- delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
- delidb.onerror = e => rej(e)
- }));
-
- await Promise.all(idbPromises);
-
- if (navigator.serviceWorker.controller) {
- navigator.serviceWorker.controller.postMessage('clear');
- await navigator.serviceWorker.getRegistrations()
- .then(registrations => {
- return Promise.all(registrations.map(registration => registration.unregister()));
- })
- .catch(e => { throw new Error(e) });
- }
-
- message(successText);
- } catch (e) {
- message(`\n${e}\n\nFlush Failed. Please retry. \n失敗しました。もう一度試してみてください。 `);
- message(`\nIf you retry more than 3 times, try manually clearing the browser cache or contact to instance admin.\n3回以上試しても失敗する場合、ブラウザのキャッシュを手動で消去し、それでもだめならインスタンス管理者に連絡してみてください。\n`)
-
- console.error(e);
- setTimeout(() => {
- location = '/';
- }, 10000)
- }
- })();
- }
-
- function message(text) {
- msg.insertAdjacentHTML('beforeend', `[${(new Date()).toString()}] ${text.replace(/\n/g,' ')}
`)
- }
diff --git a/packages/backend/src/server/web/views/flush.tsx b/packages/backend/src/server/web/views/flush.tsx
new file mode 100644
index 0000000000..f3fdc8fcb0
--- /dev/null
+++ b/packages/backend/src/server/web/views/flush.tsx
@@ -0,0 +1,23 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function FlushPage(props?: {}) {
+ return (
+ <>
+ {''}
+
+
+
+
+ Clear preferences and cache
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/gallery-post.pug b/packages/backend/src/server/web/views/gallery-post.pug
deleted file mode 100644
index 9ae25d9ac8..0000000000
--- a/packages/backend/src/server/web/views/gallery-post.pug
+++ /dev/null
@@ -1,41 +0,0 @@
-extends ./base
-
-block vars
- - const user = post.user;
- - const title = post.title;
- - const url = `${config.url}/gallery/${post.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= post.description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= post.description)
- meta(property='og:url' content= url)
- if post.isSensitive
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
- else
- meta(property='og:image' content= post.files[0].thumbnailUrl)
- meta(property='twitter:card' content='summary_large_image')
-
-block meta
- if user.host || profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
-
- if !user.host
- link(rel='alternate' href=url type='application/activity+json')
diff --git a/packages/backend/src/server/web/views/gallery-post.tsx b/packages/backend/src/server/web/views/gallery-post.tsx
new file mode 100644
index 0000000000..2bec2de930
--- /dev/null
+++ b/packages/backend/src/server/web/views/gallery-post.tsx
@@ -0,0 +1,65 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function GalleryPostPage(props: CommonProps<{
+ galleryPost: Packed<'GalleryPost'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.galleryPost.description != null ? : null}
+
+ {props.galleryPost.isSensitive && props.galleryPost.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ {!props.galleryPost.isSensitive && props.galleryPost.files != null ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/info-card.pug b/packages/backend/src/server/web/views/info-card.pug
deleted file mode 100644
index 2a4954ec8b..0000000000
--- a/packages/backend/src/server/web/views/info-card.pug
+++ /dev/null
@@ -1,50 +0,0 @@
-doctype html
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- title= meta.name || host
- style.
- html, body {
- margin: 0;
- padding: 0;
- min-height: 100vh;
- background: #fff;
- }
-
- #a {
- display: block;
- }
-
- #banner {
- background-size: cover;
- background-position: center center;
- }
-
- #title {
- display: inline-block;
- margin: 24px;
- padding: 0.5em 0.8em;
- color: #fff;
- background: rgba(0, 0, 0, 0.5);
- font-weight: bold;
- font-size: 1.3em;
- }
-
- #content {
- overflow: auto;
- color: #353c3e;
- }
-
- #description {
- margin: 24px;
- }
-
- body
- a#a(href=`https://${host}` target="_blank")
- header#banner(style=`background-image: url(${meta.bannerUrl})`)
- div#title= meta.name || host
- div#content
- div#description!= meta.description
diff --git a/packages/backend/src/server/web/views/info-card.tsx b/packages/backend/src/server/web/views/info-card.tsx
new file mode 100644
index 0000000000..27be4c69e8
--- /dev/null
+++ b/packages/backend/src/server/web/views/info-card.tsx
@@ -0,0 +1,40 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment, CommonPropsMinimum } from '@/server/web/views/_.js';
+import type { MiMeta } from '@/models/Meta.js';
+
+export function InfoCardPage(props: CommonPropsMinimum<{
+ meta: MiMeta;
+}>) {
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeDescription = props.meta.description;
+
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+ {props.meta.name ?? props.config.url}
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/note.pug b/packages/backend/src/server/web/views/note.pug
deleted file mode 100644
index ea1993aed0..0000000000
--- a/packages/backend/src/server/web/views/note.pug
+++ /dev/null
@@ -1,62 +0,0 @@
-extends ./base
-
-block vars
- - const user = note.user;
- - const title = user.name ? `${user.name} (@${user.username}${user.host ? `@${user.host}` : ''})` : `@${user.username}${user.host ? `@${user.host}` : ''}`;
- - const url = `${config.url}/notes/${note.id}`;
- - const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null;
- - const images = (note.files || []).filter(file => file.type.startsWith('image/') && !file.isSensitive)
- - const videos = (note.files || []).filter(file => file.type.startsWith('video/') && !file.isSensitive)
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= summary)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= summary)
- meta(property='og:url' content= url)
- if videos.length
- each video in videos
- meta(property='og:video:url' content= video.url)
- meta(property='og:video:secure_url' content= video.url)
- meta(property='og:video:type' content= video.type)
- // FIXME: add width and height
- // FIXME: add embed player for Twitter
- if images.length
- meta(property='twitter:card' content='summary_large_image')
- each image in images
- meta(property='og:image' content= image.url)
- else
- meta(property='twitter:card' content='summary')
- meta(property='og:image' content= avatarUrl)
-
-
-block meta
- if user.host || isRenote || profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:note-id' content=note.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
-
- if note.prev
- link(rel='prev' href=`${config.url}/notes/${note.prev}`)
- if note.next
- link(rel='next' href=`${config.url}/notes/${note.next}`)
-
- if federationEnabled
- if !user.host
- link(rel='alternate' href=url type='application/activity+json')
- if note.uri
- link(rel='alternate' href=note.uri type='application/activity+json')
diff --git a/packages/backend/src/server/web/views/note.tsx b/packages/backend/src/server/web/views/note.tsx
new file mode 100644
index 0000000000..803c3d2537
--- /dev/null
+++ b/packages/backend/src/server/web/views/note.tsx
@@ -0,0 +1,94 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+import { isRenotePacked } from '@/misc/is-renote.js';
+import { getNoteSummary } from '@/misc/get-note-summary.js';
+
+export function NotePage(props: CommonProps<{
+ note: Packed<'Note'>;
+ profile: MiUserProfile;
+}>) {
+ const title = props.note.user.name ? `${props.note.user.name} (@${props.note.user.username}${props.note.user.host ? `@${props.note.user.host}` : ''})` : `@${props.note.user.username}${props.note.user.host ? `@${props.note.user.host}` : ''}`
+ const isRenote = isRenotePacked(props.note);
+ const images = (props.note.files ?? []).filter(f => f.type.startsWith('image/'));
+ const videos = (props.note.files ?? []).filter(f => f.type.startsWith('video/'));
+ const summary = getNoteSummary(props.note);
+
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+ {videos.map(video => (
+ <>
+
+
+
+ {video.thumbnailUrl ? : null}
+ {video.properties.width != null ? : null}
+ {video.properties.height != null ? : null}
+ >
+ ))}
+ {images.length > 0 ? (
+ <>
+
+ {images.map(image => (
+ <>
+
+ {image.properties.width != null ? : null}
+ {image.properties.height != null ? : null}
+ >
+ ))}
+ >
+ ) : (
+ <>
+
+
+ >
+ )}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.note.user.host != null || isRenote || props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+
+ {props.federationEnabled ? (
+ <>
+ {props.note.user.host == null ? : null}
+ {props.note.uri != null ? : null}
+ >
+ ) : null}
+ >
+ );
+ }
+
+ return (
+
+ )
+}
diff --git a/packages/backend/src/server/web/views/oauth.pug b/packages/backend/src/server/web/views/oauth.pug
deleted file mode 100644
index 4195ccc3a3..0000000000
--- a/packages/backend/src/server/web/views/oauth.pug
+++ /dev/null
@@ -1,11 +0,0 @@
-extends ./base
-
-block meta
- //- Should be removed by the page when it loads, so that it won't needlessly
- //- stay when user navigates away via the navigation bar
- //- XXX: Remove navigation bar in auth page?
- meta(name='misskey:oauth:transaction-id' content=transactionId)
- meta(name='misskey:oauth:client-name' content=clientName)
- if clientLogo
- meta(name='misskey:oauth:client-logo' content=clientLogo)
- meta(name='misskey:oauth:scope' content=scope)
diff --git a/packages/backend/src/server/web/views/oauth.tsx b/packages/backend/src/server/web/views/oauth.tsx
new file mode 100644
index 0000000000..d12b0d15fd
--- /dev/null
+++ b/packages/backend/src/server/web/views/oauth.tsx
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function OAuthPage(props: CommonProps<{
+ transactionId: string;
+ clientName: string;
+ clientLogo?: string;
+ scope: string[];
+}>) {
+
+ //- Should be removed by the page when it loads, so that it won't needlessly
+ //- stay when user navigates away via the navigation bar
+ //- XXX: Remove navigation bar in auth page?
+ function metaBlock() {
+ return (
+ <>
+
+
+ {props.clientLogo ? : null}
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/page.pug b/packages/backend/src/server/web/views/page.pug
deleted file mode 100644
index 03c50eca8a..0000000000
--- a/packages/backend/src/server/web/views/page.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-extends ./base
-
-block vars
- - const user = page.user;
- - const title = page.title;
- - const url = `${config.url}/@${user.username}/pages/${page.name}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= page.summary)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= page.summary)
- meta(property='og:url' content= url)
- meta(property='og:image' content= page.eyeCatchingImage ? page.eyeCatchingImage.thumbnailUrl : avatarUrl)
- meta(property='twitter:card' content= page.eyeCatchingImage ? 'summary_large_image' : 'summary')
-
-block meta
- if profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:page-id' content=page.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
diff --git a/packages/backend/src/server/web/views/page.tsx b/packages/backend/src/server/web/views/page.tsx
new file mode 100644
index 0000000000..d0484612df
--- /dev/null
+++ b/packages/backend/src/server/web/views/page.tsx
@@ -0,0 +1,64 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function PagePage(props: CommonProps<{
+ page: Packed<'Page'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.page.summary != null ? : null}
+
+ {props.page.eyeCatchingImage != null ? (
+ <>
+
+
+ >
+ ) : props.page.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/reversi-game.pug b/packages/backend/src/server/web/views/reversi-game.pug
deleted file mode 100644
index 0b5ffb2bb0..0000000000
--- a/packages/backend/src/server/web/views/reversi-game.pug
+++ /dev/null
@@ -1,20 +0,0 @@
-extends ./base
-
-block vars
- - const user1 = game.user1;
- - const user2 = game.user2;
- - const title = `${user1.username} vs ${user2.username}`;
- - const url = `${config.url}/reversi/g/${game.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content='⚫⚪Misskey Reversi⚪⚫')
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content='⚫⚪Misskey Reversi⚪⚫')
- meta(property='og:url' content= url)
- meta(property='twitter:card' content='summary')
diff --git a/packages/backend/src/server/web/views/reversi-game.tsx b/packages/backend/src/server/web/views/reversi-game.tsx
new file mode 100644
index 0000000000..22609311fd
--- /dev/null
+++ b/packages/backend/src/server/web/views/reversi-game.tsx
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function ReversiGamePage(props: CommonProps<{
+ reversiGame: Packed<'ReversiGameDetailed'>;
+}>) {
+ const title = `${props.reversiGame.user1.username} vs ${props.reversiGame.user2.username}`;
+ const description = `⚫⚪Misskey Reversi⚪⚫`;
+
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/user.pug b/packages/backend/src/server/web/views/user.pug
deleted file mode 100644
index b9f740f5b6..0000000000
--- a/packages/backend/src/server/web/views/user.pug
+++ /dev/null
@@ -1,44 +0,0 @@
-extends ./base
-
-block vars
- - const title = user.name ? `${user.name} (@${user.username}${user.host ? `@${user.host}` : ''})` : `@${user.username}${user.host ? `@${user.host}` : ''}`;
- - const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= profile.description)
-
-block og
- meta(property='og:type' content='blog')
- meta(property='og:title' content= title)
- meta(property='og:description' content= profile.description)
- meta(property='og:url' content= url)
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
-
-block meta
- if user.host || profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
-
- if profile.twitter
- meta(name='twitter:creator' content=`@${profile.twitter.screenName}`)
-
- if !sub
- if federationEnabled
- if !user.host
- link(rel='alternate' href=`${config.url}/users/${user.id}` type='application/activity+json')
- if user.uri
- link(rel='alternate' href=user.uri type='application/activity+json')
- if profile.url
- link(rel='alternate' href=profile.url type='text/html')
-
- each m in me
- link(rel='me' href=`${m}`)
diff --git a/packages/backend/src/server/web/views/user.tsx b/packages/backend/src/server/web/views/user.tsx
new file mode 100644
index 0000000000..76c2633ab9
--- /dev/null
+++ b/packages/backend/src/server/web/views/user.tsx
@@ -0,0 +1,74 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function UserPage(props: CommonProps<{
+ user: Packed<'UserDetailed'>;
+ profile: MiUserProfile;
+ sub?: string;
+}>) {
+ const title = props.user.name ? `${props.user.name} (@${props.user.username}${props.user.host ? `@${props.user.host}` : ''})` : `@${props.user.username}${props.user.host ? `@${props.user.host}` : ''}`;
+ const me = props.profile.fields
+ ? props.profile.fields
+ .filter(field => field.value != null && field.value.match(/^https?:/))
+ .map(field => field.value)
+ : [];
+
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.user.description != null ? : null}
+
+
+
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.user.host != null || props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ {props.sub == null && props.federationEnabled ? (
+ <>
+ {props.user.host == null ? : null}
+ {props.user.uri != null ? : null}
+ {props.profile.url != null ? : null}
+ >
+ ) : null}
+
+ {me.map((url) => (
+
+ ))}
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/test-federation/compose.a.yml b/packages/backend/test-federation/compose.a.yml
index 6a305b404c..1d3d8fd404 100644
--- a/packages/backend/test-federation/compose.a.yml
+++ b/packages/backend/test-federation/compose.a.yml
@@ -40,6 +40,10 @@ services:
source: ./.config/a.test.default.yml
target: /misskey/.config/default.yml
read_only: true
+ - type: bind
+ source: ../scripts/convert_config.js
+ target: /misskey/packages/backend/scripts/convert_config.js
+ read_only: true
db.a.test:
extends:
diff --git a/packages/backend/test-federation/compose.b.yml b/packages/backend/test-federation/compose.b.yml
index 1158b53bae..9a3bfb8abe 100644
--- a/packages/backend/test-federation/compose.b.yml
+++ b/packages/backend/test-federation/compose.b.yml
@@ -40,6 +40,10 @@ services:
source: ./.config/b.test.default.yml
target: /misskey/.config/default.yml
read_only: true
+ - type: bind
+ source: ../scripts/convert_config.js
+ target: /misskey/packages/backend/scripts/convert_config.js
+ read_only: true
db.b.test:
extends:
diff --git a/packages/backend/test-federation/compose.tpl.yml b/packages/backend/test-federation/compose.tpl.yml
index 3d2ed21337..ad9e127b3a 100644
--- a/packages/backend/test-federation/compose.tpl.yml
+++ b/packages/backend/test-federation/compose.tpl.yml
@@ -42,6 +42,10 @@ services:
source: ../package.json
target: /misskey/packages/backend/package.json
read_only: true
+ - type: bind
+ source: ../scripts/convert_config.js
+ target: /misskey/packages/backend/scripts/convert_config.js
+ read_only: true
- type: bind
source: ../../misskey-js/built
target: /misskey/packages/misskey-js/built
@@ -50,6 +54,14 @@ services:
source: ../../misskey-js/package.json
target: /misskey/packages/misskey-js/package.json
read_only: true
+ - type: bind
+ source: ../../i18n/built
+ target: /misskey/packages/i18n/built
+ read_only: true
+ - type: bind
+ source: ../../i18n/package.json
+ target: /misskey/packages/i18n/package.json
+ read_only: true
- type: bind
source: ../../misskey-reversi/built
target: /misskey/packages/misskey-reversi/built
@@ -95,7 +107,7 @@ services:
retries: 20
db:
- image: postgres:15-alpine
+ image: postgres:18-alpine
env_file:
- ./.config/docker.env
volumes:
diff --git a/packages/backend/test-federation/compose.yml b/packages/backend/test-federation/compose.yml
index 330cc33854..07c0e03f99 100644
--- a/packages/backend/test-federation/compose.yml
+++ b/packages/backend/test-federation/compose.yml
@@ -54,6 +54,10 @@ services:
source: ../jest.js
target: /misskey/packages/backend/jest.js
read_only: true
+ - type: bind
+ source: ../scripts/convert_config.js
+ target: /misskey/packages/backend/scripts/convert_config.js
+ read_only: true
- type: bind
source: ../../misskey-js/built
target: /misskey/packages/misskey-js/built
@@ -62,6 +66,14 @@ services:
source: ../../misskey-js/package.json
target: /misskey/packages/misskey-js/package.json
read_only: true
+ - type: bind
+ source: ../../i18n/built
+ target: /misskey/packages/i18n/built
+ read_only: true
+ - type: bind
+ source: ../../i18n/package.json
+ target: /misskey/packages/i18n/package.json
+ read_only: true
- type: bind
source: ../../../package.json
target: /misskey/package.json
diff --git a/packages/backend/test-federation/tsconfig.json b/packages/backend/test-federation/tsconfig.json
index 3a1cb3b9f3..8e74a62e81 100644
--- a/packages/backend/test-federation/tsconfig.json
+++ b/packages/backend/test-federation/tsconfig.json
@@ -13,12 +13,12 @@
/* Language and Environment */
"target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
+ "jsx": "react-jsx", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+ "jsxImportSource": "@kitajs/html", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
diff --git a/packages/backend/test-server/tsconfig.json b/packages/backend/test-server/tsconfig.json
index 10313699c2..7ed7c10ed7 100644
--- a/packages/backend/test-server/tsconfig.json
+++ b/packages/backend/test-server/tsconfig.json
@@ -23,6 +23,8 @@
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"isolatedModules": true,
+ "jsx": "react-jsx",
+ "jsxImportSource": "@kitajs/html",
"rootDir": "../src",
"baseUrl": "./",
"paths": {
diff --git a/packages/backend/test/compose.yml b/packages/backend/test/compose.yml
index 6593fc33dd..fe96616fc0 100644
--- a/packages/backend/test/compose.yml
+++ b/packages/backend/test/compose.yml
@@ -5,7 +5,7 @@ services:
- "127.0.0.1:56312:6379"
dbtest:
- image: postgres:15
+ image: postgres:18
ports:
- "127.0.0.1:54312:5432"
environment:
diff --git a/packages/backend/test/e2e/antennas.ts b/packages/backend/test/e2e/antennas.ts
index d1ad747274..ea7cd77d66 100644
--- a/packages/backend/test/e2e/antennas.ts
+++ b/packages/backend/test/e2e/antennas.ts
@@ -70,6 +70,9 @@ describe('アンテナ', () => {
let userMutingAlice: User;
let userMutedByAlice: User;
+ let testChannel: misskey.entities.Channel;
+ let testMutedChannel: misskey.entities.Channel;
+
beforeAll(async () => {
root = await signup({ username: 'root' });
alice = await signup({ username: 'alice' });
@@ -121,6 +124,10 @@ describe('アンテナ', () => {
userMutedByAlice = await signup({ username: 'userMutedByAlice' });
await post(userMutedByAlice, { text: 'test' });
await api('mute/create', { userId: userMutedByAlice.id }, alice);
+
+ testChannel = (await api('channels/create', { name: 'test' }, root)).body;
+ testMutedChannel = (await api('channels/create', { name: 'test-muted' }, root)).body;
+ await api('channels/mute/create', { channelId: testMutedChannel.id }, alice);
}, 1000 * 60 * 10);
beforeEach(async () => {
@@ -606,6 +613,20 @@ describe('アンテナ', () => {
{ note: (): Promise => post(bob, { text: `${keyword}` }), included: true },
],
},
+ {
+ label: 'チャンネルノートも含む',
+ parameters: () => ({ src: 'all' }),
+ posts: [
+ { note: (): Promise => post(bob, { text: `test ${keyword}`, channelId: testChannel.id }), included: true },
+ ],
+ },
+ {
+ label: 'ミュートしてるチャンネルは含まない',
+ parameters: () => ({ src: 'all' }),
+ posts: [
+ { note: (): Promise => post(bob, { text: `test ${keyword}`, channelId: testMutedChannel.id }) },
+ ],
+ },
])('が取得できること($label)', async ({ parameters, posts }) => {
const antenna = await successfulApiCall({
endpoint: 'antennas/create',
diff --git a/packages/backend/test/e2e/exports.ts b/packages/backend/test/e2e/exports.ts
index 385c5f169d..5bdb7e79a3 100644
--- a/packages/backend/test/e2e/exports.ts
+++ b/packages/backend/test/e2e/exports.ts
@@ -17,7 +17,7 @@ describe('export-clips', () => {
let bob: misskey.entities.SignupResponse;
// XXX: Any better way to get the result?
- async function pollFirstDriveFile() {
+ async function pollFirstDriveFile(): Promise {
while (true) {
const files = (await api('drive/files', {}, alice)).body;
if (!files.length) {
diff --git a/packages/backend/test/e2e/fetch-resource.ts b/packages/backend/test/e2e/fetch-resource.ts
index 33c4c60e7d..f2d1c8e2e2 100644
--- a/packages/backend/test/e2e/fetch-resource.ts
+++ b/packages/backend/test/e2e/fetch-resource.ts
@@ -74,7 +74,7 @@ describe('Webリソース', () => {
};
const metaTag = (res: SimpleGetResponse, key: string, superkey = 'name'): string => {
- return res.body.window.document.querySelector('meta[' + superkey + '="' + key + '"]')?.content;
+ return res.body.querySelector('meta[' + superkey + '="' + key + '"]')?.attributes.content;
};
beforeAll(async () => {
diff --git a/packages/backend/test/e2e/oauth.ts b/packages/backend/test/e2e/oauth.ts
index 1aeff427d9..4669423697 100644
--- a/packages/backend/test/e2e/oauth.ts
+++ b/packages/backend/test/e2e/oauth.ts
@@ -20,7 +20,7 @@ import {
ResourceOwnerPassword,
} from 'simple-oauth2';
import pkceChallenge from 'pkce-challenge';
-import { JSDOM } from 'jsdom';
+import * as htmlParser from 'node-html-parser';
import Fastify, { type FastifyInstance, type FastifyReply } from 'fastify';
import { api, port, sendEnvUpdateRequest, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
@@ -74,11 +74,11 @@ const clientConfig: ModuleOptions<'client_id'> = {
};
function getMeta(html: string): { transactionId: string | undefined, clientName: string | undefined, clientLogo: string | undefined } {
- const fragment = JSDOM.fragment(html);
+ const doc = htmlParser.parse(`${html}
`);
return {
- transactionId: fragment.querySelector('meta[name="misskey:oauth:transaction-id"]')?.content,
- clientName: fragment.querySelector('meta[name="misskey:oauth:client-name"]')?.content,
- clientLogo: fragment.querySelector('meta[name="misskey:oauth:client-logo"]')?.content,
+ transactionId: doc.querySelector('meta[name="misskey:oauth:transaction-id"]')?.attributes.content,
+ clientName: doc.querySelector('meta[name="misskey:oauth:client-name"]')?.attributes.content,
+ clientLogo: doc.querySelector('meta[name="misskey:oauth:client-logo"]')?.attributes.content,
};
}
@@ -149,7 +149,7 @@ function assertIndirectError(response: Response, error: string): void {
async function assertDirectError(response: Response, status: number, error: string): Promise {
assert.strictEqual(response.status, status);
- const data = await response.json();
+ const data = await response.json() as any;
assert.strictEqual(data.error, error);
}
@@ -705,7 +705,7 @@ describe('OAuth', () => {
const response = await fetch(new URL('.well-known/oauth-authorization-server', host));
assert.strictEqual(response.status, 200);
- const body = await response.json();
+ const body = await response.json() as any;
assert.strictEqual(body.issuer, 'http://misskey.local');
assert.ok(body.scopes_supported.includes('write:notes'));
});
diff --git a/packages/backend/test/e2e/timelines.ts b/packages/backend/test/e2e/timelines.ts
index 6e6a766755..8a23657772 100644
--- a/packages/backend/test/e2e/timelines.ts
+++ b/packages/backend/test/e2e/timelines.ts
@@ -3,15 +3,18 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
// How to run:
// pnpm jest -- e2e/timelines.ts
import * as assert from 'assert';
import { describe, beforeAll, test } from 'vitest';
import { setTimeout } from 'node:timers/promises';
+import { entities } from 'misskey-js';
import { Redis } from 'ioredis';
-import { SignupResponse, Note, UserList } from 'misskey-js/entities.js';
-import { api, post, randomString, sendEnvUpdateRequest, signup, uploadUrl } from '../utils.js';
+import { SignupResponse, Note } from 'misskey-js/entities.js';
+import { api, initTestDb, post, randomString, sendEnvUpdateRequest, signup, uploadUrl, UserToken } from '../utils.js';
import { loadConfig } from '@/config.js';
function genHost() {
@@ -21,12 +24,72 @@ function genHost() {
let redisForTimelines: Redis;
let root: SignupResponse;
+async function renote(noteId: string, user: UserToken): Promise {
+ return await api('notes/create', { renoteId: noteId }, user).then(it => it.body.createdNote);
+}
+
+async function createChannel(name: string, user: UserToken): Promise {
+ return (await api('channels/create', { name }, user)).body;
+}
+
+async function followChannel(channelId: string, user: UserToken) {
+ return await api('channels/follow', { channelId }, user);
+}
+
+async function muteChannel(channelId: string, user: UserToken) {
+ await api('channels/mute/create', { channelId }, user);
+}
+
+async function createList(name: string, user: UserToken): Promise {
+ return (await api('users/lists/create', { name }, user)).body;
+}
+
+async function pushList(listId: string, pushUserIds: string[] = [], user: UserToken) {
+ for (const userId of pushUserIds) {
+ await api('users/lists/push', { listId, userId }, user);
+ }
+ await setTimeout(500);
+}
+
+async function createRole(name: string, user: UserToken): Promise {
+ return (await api('admin/roles/create', {
+ name,
+ description: '',
+ color: '#000000',
+ iconUrl: '',
+ target: 'manual',
+ condFormula: {},
+ isPublic: true,
+ isModerator: false,
+ isAdministrator: false,
+ isExplorable: true,
+ asBadge: false,
+ canEditMembersByModerator: false,
+ displayOrder: 0,
+ policies: {},
+ }, user)).body;
+}
+
+async function assignRole(roleId: string, userId: string, user: UserToken) {
+ await api('admin/roles/assign', { userId, roleId }, user);
+}
+
describe('Timelines', () => {
+ let root: UserToken;
+
beforeAll(async () => {
redisForTimelines = new Redis(loadConfig().redisForTimelines);
root = await signup({ username: 'root' });
}, 1000 * 60 * 2);
+ // afterEach(async () => {
+ // // テスト中に作ったノートをきれいにする。
+ // // ユーザも作っているが、時間差で動く通知系処理などがあり、このタイミングで消すとエラー落ちするので消さない(ノートさえ消えていれば支障はない)
+ // const db = await initTestDb(true);
+ // await db.query('DELETE FROM "note"');
+ // await db.query('DELETE FROM "channel"');
+ // });
+
describe.each([
{ enableFanoutTimeline: true },
{ enableFanoutTimeline: false },
@@ -612,6 +675,280 @@ describe('Timelines', () => {
assert.strictEqual(res.body.some(note => note.id === bobNote.id), false);
});
+ describe('Channel', () => {
+ test('チャンネル未フォロー + ユーザ未フォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザ未フォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('チャンネル未フォロー + ユーザフォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('チャンネル未フォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザ未フォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザ未フォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+ });
+
test('FTT: ローカルユーザーの HTL にはプッシュされる', async () => {
const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
@@ -1013,41 +1350,277 @@ describe('Timelines', () => {
assert.strictEqual(res.body.some(note => note.id === bobNote2.id), true);
}, 1000 * 10);
- describe('凍結', () => {
- let alice: SignupResponse, bob: SignupResponse, carol: SignupResponse;
- let aliceNote: Note, bobNote: Note, carolNote: Note;
+ describe('Channel', () => {
+ test('チャンネル未フォロー + ユーザ未フォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
- beforeAll(async () => {
- [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
+ const channel = await createChannel('channel', bob);
- aliceNote = await post(alice, { text: 'hi' });
- bobNote = await post(bob, { text: 'yo' });
- carolNote = await post(carol, { text: 'kon\'nichiwa' });
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
await waitForPushToTl();
- });
-
- test('凍結後に凍結されたユーザーのノートは見えなくなる', async () => {
- await api('admin/suspend-user', { userId: carol.id }, root);
- await setTimeout(100);
const res = await api('notes/local-timeline', { limit: 100 }, alice);
- assert.strictEqual(res.body.some(note => note.id === aliceNote.id), true);
- assert.strictEqual(res.body.some(note => note.id === bobNote.id), true);
- assert.strictEqual(res.body.some(note => note.id === carolNote.id), false);
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
});
- test('凍結解除後に凍結されていたユーザーのノートは見えるようになる', async () => {
- await api('admin/unsuspend-user', { userId: carol.id }, root);
- await setTimeout(100);
+ test('チャンネルフォロー + ユーザ未フォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
const res = await api('notes/local-timeline', { limit: 100 }, alice);
- assert.strictEqual(res.body.some(note => note.id === aliceNote.id), true);
- assert.strictEqual(res.body.some(note => note.id === bobNote.id), true);
- assert.strictEqual(res.body.some(note => note.id === carolNote.id), true);
- assert.strictEqual(res.body.find(note => note.id === carolNote.id)?.text, 'kon\'nichiwa');
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + ユーザフォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザフォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザ未フォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザ未フォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/local-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
});
});
});
@@ -1092,7 +1665,8 @@ describe('Timelines', () => {
});
test('withReplies: false でフォローしているユーザーからの自分への返信が含まれる', async () => {
- /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */ if (!enableFanoutTimeline) return;
+ /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */
+ if (!enableFanoutTimeline) return;
const [alice, bob] = await Promise.all([signup(), signup()]);
@@ -1128,7 +1702,8 @@ describe('Timelines', () => {
});
test('withReplies: true でフォローしているユーザーの行った別のフォローしているユーザーの visibility: followers な投稿への返信が含まれる', async () => {
- /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */ if (!enableFanoutTimeline) return;
+ /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */
+ if (!enableFanoutTimeline) return;
const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
@@ -1150,7 +1725,8 @@ describe('Timelines', () => {
});
test('withReplies: true でフォローしているユーザーの自分の visibility: followers な投稿への返信が含まれる', async () => {
- /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */ if (!enableFanoutTimeline) return;
+ /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */
+ if (!enableFanoutTimeline) return;
const [alice, bob] = await Promise.all([signup(), signup()]);
@@ -1226,7 +1802,8 @@ describe('Timelines', () => {
});
test('withReplies: false でフォローしていないユーザーからの自分への返信が含まれる', async () => {
- /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */ if (!enableFanoutTimeline) return;
+ /* FIXME: https://github.com/misskey-dev/misskey/issues/12065 */
+ if (!enableFanoutTimeline) return;
const [alice, bob] = await Promise.all([signup(), signup()]);
@@ -1270,6 +1847,280 @@ describe('Timelines', () => {
assert.strictEqual(res.body.some(note => note.id === bobNote2.id), true);
}, 1000 * 10);
+ describe('Channel', () => {
+ test('チャンネル未フォロー + ユーザ未フォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザ未フォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('チャンネル未フォロー + ユーザフォロー = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('チャンネル未フォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザ未フォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザ未フォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザフォロー = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザ未フォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + ユーザフォロー + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+ await api('following/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/hybrid-timeline', { limit: 100 }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+ });
+
describe('凍結', () => {
/*
* bob = 未フォローのローカルユーザー (凍結対象でない)
@@ -1608,45 +2459,309 @@ describe('Timelines', () => {
assert.strictEqual(res.body.some(note => note.id === bobNote.id), false);
});
- describe('凍結', () => {
- let alice: SignupResponse, bob: SignupResponse, carol: SignupResponse;
- let aliceNote: Note, bobNote: Note, carolNote: Note;
- let list: UserList;
+ describe('Channel', () => {
+ test('チャンネル未フォロー + リスインしてない = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
- beforeAll(async () => {
- [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
+ const list = await createList('list', alice);
- list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
+ const channel = await createChannel('channel', bob);
- await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
- await api('users/lists/push', { listId: list.id, userId: carol.id }, alice);
- aliceNote = await post(alice, { text: 'hi' });
- bobNote = await post(bob, { text: 'yo' });
- carolNote = await post(carol, { text: 'kon\'nichiwa' });
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
await waitForPushToTl();
- await api('admin/suspend-user', { userId: carol.id }, root);
- await setTimeout(100);
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
});
- test('凍結後に凍結されたユーザーのノートは見えなくなる', async () => {
- const res = await api('notes/user-list-timeline', { listId: list.id }, alice);
+ test('チャンネルフォロー + リスインしてない = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
- assert.strictEqual(res.body.some(note => note.id === aliceNote.id), false);
- assert.strictEqual(res.body.some(note => note.id === bobNote.id), true);
- assert.strictEqual(res.body.some(note => note.id === carolNote.id), false);
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
});
- test('凍結解除後に凍結されていたユーザーのノートは見えるようになる', async () => {
- await api('admin/unsuspend-user', { userId: carol.id }, root);
- await setTimeout(100);
+ test('チャンネル未フォロー + リスインしてる = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
- const res = await api('notes/user-list-timeline', { listId: list.id }, alice);
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
- assert.strictEqual(res.body.some(note => note.id === aliceNote.id), false);
- assert.strictEqual(res.body.some(note => note.id === bobNote.id), true);
- assert.strictEqual(res.body.some(note => note.id === carolNote.id), true);
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + リスインしてる = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + リスインしてない + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + リスインしてない + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネル未フォロー + リスインしてる + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('チャンネルフォロー + リスインしてる + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + リスインしてない = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + リスインしてない = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + リスインしてる = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + リスインしてる = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + リスインしてない + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + リスインしてない + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネル未フォロー + リスインしてる + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルフォロー + リスインしてる + チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const list = await createList('list', alice);
+ await pushList(list.id, [bob.id], alice);
+
+ const channel = await createChannel('channel', bob);
+ await followChannel(channel.id, alice);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('notes/user-list-timeline', { limit: 100, listId: list.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
});
});
});
@@ -1938,8 +3053,276 @@ describe('Timelines', () => {
const res = await api('users/notes', { userId: alice.id, sinceId: noteSince.id, untilId: noteUntil.id });
assert.deepStrictEqual(res.body, [note3, note2, note1]);
});
+
+ describe('Channel', () => {
+ test('チャンネルミュートなし = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('users/notes', { userId: bob.id, withChannelNotes: true }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('users/notes', { userId: bob.id, withChannelNotes: true }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('[チャンネル外リノート] チャンネルミュートなし = TLに流れる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('users/notes', { userId: bob.id, withChannelNotes: true }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('[チャンネル外リノート] チャンネルミュート = TLに流れない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await renote(bobNote.id, bob);
+
+ await waitForPushToTl();
+
+ const res = await api('users/notes', { userId: bob.id, withChannelNotes: true }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+ });
});
+ describe('Channel TL', () => {
+ test('閲覧中チャンネルのノートが含まれる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), false);
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('閲覧中チャンネルとは別チャンネルのノートは含まれない', async() => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ const channel2 = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel2.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), false);
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('閲覧中チャンネルのノートにリノートが含まれる', async() => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await post(bob, { channelId: channel.id, renoteId: bobNote.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('閲覧中チャンネルとは別チャンネルからのリノートが含まれる', async() => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ const channel2 = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel2.id });
+ const bobRenote = await post(bob, { channelId: channel.id, renoteId: bobNote.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('閲覧中チャンネルに自分の他人への返信が含まれる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const aliceNote = await post(alice, { text: 'hi', replyId: bobNote.id, channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), true);
+ });
+
+ test('閲覧中チャンネルに他人の自分への返信が含まれる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi', channelId: channel.id });
+ const bobNote = await post(bob, { text: 'ok', replyId: aliceNote.id, channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('閲覧中チャンネルにミュートしているユーザのノートは含まれない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ await api('mute/create', { userId: bob.id }, alice);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), false);
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('閲覧中チャンネルにこちらをブロックしているユーザのノートは含まれない', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ await api('blocking/create', { userId: alice.id }, bob);
+
+ const channel = await createChannel('channel', bob);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), false);
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), false);
+ });
+
+ test('閲覧中チャンネルをミュートしていてもノートが含まれる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), false);
+ assert.strictEqual(res.body.some((note: any) => note.id === bobNote.id), true);
+ });
+
+ test('閲覧中チャンネルをミュートしていても、同チャンネルのリノートが含まれる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await post(bob, { channelId: channel.id, renoteId: bobNote.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('閲覧中チャンネルをミュートしていても、同チャンネルのリプライが含まれる', async () => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ await muteChannel(channel.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel.id });
+ const bobRenote = await post(bob, { channelId: channel.id, replyId: bobNote.id, text: 'ho' });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), true);
+ });
+
+ test('閲覧中チャンネルとは別チャンネルをミュートしているとき、そのチャンネルからのリノートは含まれない', async() => {
+ const [alice, bob] = await Promise.all([signup(), signup()]);
+
+ const channel = await createChannel('channel', bob);
+ const channel2 = await createChannel('channel', bob);
+ await muteChannel(channel2.id, alice);
+
+ const aliceNote = await post(alice, { text: 'hi' });
+ const bobNote = await post(bob, { text: 'ok', channelId: channel2.id });
+ const bobRenote = await post(bob, { channelId: channel.id, renoteId: bobNote.id });
+
+ await waitForPushToTl();
+
+ const res = await api('channels/timeline', { channelId: channel.id }, alice);
+
+ assert.strictEqual(res.body.some((note: any) => note.id === bobRenote.id), false);
+ });
+ });
// TODO: リノートミュート済みユーザーのテスト
// TODO: ページネーションのテスト
});
diff --git a/packages/backend/test/jest.setup.unit.cjs b/packages/backend/test/jest.setup.unit.cjs
new file mode 100644
index 0000000000..dd879c81c8
--- /dev/null
+++ b/packages/backend/test/jest.setup.unit.cjs
@@ -0,0 +1,10 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+module.exports = async () => {
+ // DBはUTC(っぽい)ので、テスト側も合わせておく
+ process.env.TZ = 'UTC';
+ process.env.NODE_ENV = 'test';
+};
diff --git a/packages/backend/test/setup.ts b/packages/backend/test/setup.ts
index 7c6dd6a55f..9185f58acb 100644
--- a/packages/backend/test/setup.ts
+++ b/packages/backend/test/setup.ts
@@ -9,3 +9,4 @@ beforeAll(async () => {
await initTestDb(false);
await sendEnvResetRequest();
});
+
diff --git a/packages/backend/test/tsconfig.json b/packages/backend/test/tsconfig.json
index 67cb28bfd2..f32050c283 100644
--- a/packages/backend/test/tsconfig.json
+++ b/packages/backend/test/tsconfig.json
@@ -23,6 +23,8 @@
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"isolatedModules": true,
+ "jsx": "react-jsx",
+ "jsxImportSource": "@kitajs/html",
"baseUrl": "./",
"paths": {
"@/*": ["../src/*"]
diff --git a/packages/backend/test/unit/AnnouncementService.ts b/packages/backend/test/unit/AnnouncementService.ts
index eaa8566cf1..1de25b3f71 100644
--- a/packages/backend/test/unit/AnnouncementService.ts
+++ b/packages/backend/test/unit/AnnouncementService.ts
@@ -27,7 +27,7 @@ import { GlobalEventService } from '@/core/GlobalEventService.js';
import { ModerationLogService } from '@/core/ModerationLogService.js';
import { secureRndstr } from '@/misc/secure-rndstr.js';
import type { TestingModule } from '@nestjs/testing';
-import type { MockFunctionMetadata } from 'jest-mock';
+import type { MockMetadata } from 'jest-mock';
const moduleMocker = new ModuleMocker(global);
@@ -85,7 +85,7 @@ describe('AnnouncementService', () => {
log: vi.fn(),
};
} else if (typeof token === 'function') {
- const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata;
+ const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata;
const Mock = moduleMocker.generateFromMetadata(mockMetadata);
return new Mock();
}
diff --git a/packages/backend/test/unit/ApMfmService.ts b/packages/backend/test/unit/ApMfmService.ts
index 9408b2da1f..c020ca98c0 100644
--- a/packages/backend/test/unit/ApMfmService.ts
+++ b/packages/backend/test/unit/ApMfmService.ts
@@ -10,7 +10,6 @@ import { Test } from '@nestjs/testing';
import { CoreModule } from '@/core/CoreModule.js';
import { ApMfmService } from '@/core/activitypub/ApMfmService.js';
import { GlobalModule } from '@/GlobalModule.js';
-import { MiNote } from '@/models/Note.js';
describe('ApMfmService', () => {
let apMfmService: ApMfmService;
@@ -32,7 +31,7 @@ describe('ApMfmService', () => {
const { content, noMisskeyContent } = apMfmService.getNoteHtml(note);
assert.equal(noMisskeyContent, true, 'noMisskeyContent');
- assert.equal(content, 'テキスト #タグ @mention 🍊 :emoji: https://example.com
', 'content');
+ assert.equal(content, 'テキスト #タグ @mention 🍊 :emoji: https://example.com ', 'content');
});
test('Provide _misskey_content for MFM', () => {
@@ -44,7 +43,7 @@ describe('ApMfmService', () => {
const { content, noMisskeyContent } = apMfmService.getNoteHtml(note);
assert.equal(noMisskeyContent, false, 'noMisskeyContent');
- assert.equal(content, 'foo
', 'content');
+ assert.equal(content, 'foo ', 'content');
});
});
});
diff --git a/packages/backend/test/unit/CaptchaService.ts b/packages/backend/test/unit/CaptchaService.ts
index a83a1d3218..5a013d5cd2 100644
--- a/packages/backend/test/unit/CaptchaService.ts
+++ b/packages/backend/test/unit/CaptchaService.ts
@@ -447,7 +447,7 @@ describe('CaptchaService', () => {
if (!res.success) {
expect(res.error.code).toBe(code);
}
- expect(metaService.update).not.toBeCalled();
+ expect(metaService.update).not.toHaveBeenCalled();
}
describe('invalidParameters', () => {
diff --git a/packages/backend/test/unit/ChannelFollowingService.ts b/packages/backend/test/unit/ChannelFollowingService.ts
new file mode 100644
index 0000000000..2d3196f2f4
--- /dev/null
+++ b/packages/backend/test/unit/ChannelFollowingService.ts
@@ -0,0 +1,235 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/* eslint-disable */
+
+import { afterEach, beforeEach, describe, expect } from '@jest/globals';
+import { Test, TestingModule } from '@nestjs/testing';
+import { GlobalModule } from '@/GlobalModule.js';
+import { CoreModule } from '@/core/CoreModule.js';
+import { GlobalEventService } from '@/core/GlobalEventService.js';
+import { IdService } from '@/core/IdService.js';
+import {
+ type ChannelFollowingsRepository,
+ ChannelsRepository,
+ DriveFilesRepository,
+ MiChannel,
+ MiChannelFollowing,
+ MiDriveFile,
+ MiUser,
+ UserProfilesRepository,
+ UsersRepository,
+} from '@/models/_.js';
+import { DI } from '@/di-symbols.js';
+import { ChannelFollowingService } from "@/core/ChannelFollowingService.js";
+import { MiLocalUser } from "@/models/User.js";
+
+describe('ChannelFollowingService', () => {
+ let app: TestingModule;
+ let service: ChannelFollowingService;
+ let channelsRepository: ChannelsRepository;
+ let channelFollowingsRepository: ChannelFollowingsRepository;
+ let usersRepository: UsersRepository;
+ let userProfilesRepository: UserProfilesRepository;
+ let driveFilesRepository: DriveFilesRepository;
+ let idService: IdService;
+
+ let alice: MiLocalUser;
+ let bob: MiLocalUser;
+ let channel1: MiChannel;
+ let channel2: MiChannel;
+ let channel3: MiChannel;
+ let driveFile1: MiDriveFile;
+ let driveFile2: MiDriveFile;
+
+ async function createUser(data: Partial = {}) {
+ const user = await usersRepository
+ .insert({
+ id: idService.gen(),
+ username: 'username',
+ usernameLower: 'username',
+ ...data,
+ })
+ .then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
+
+ await userProfilesRepository.insert({
+ userId: user.id,
+ });
+
+ return user;
+ }
+
+ async function createChannel(data: Partial = {}) {
+ return await channelsRepository
+ .insert({
+ id: idService.gen(),
+ ...data,
+ })
+ .then(x => channelsRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ async function createChannelFollowing(data: Partial = {}) {
+ return await channelFollowingsRepository
+ .insert({
+ id: idService.gen(),
+ ...data,
+ })
+ .then(x => channelFollowingsRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ async function fetchChannelFollowing() {
+ return await channelFollowingsRepository.findBy({});
+ }
+
+ async function createDriveFile(data: Partial = {}) {
+ return await driveFilesRepository
+ .insert({
+ id: idService.gen(),
+ md5: 'md5',
+ name: 'name',
+ size: 0,
+ type: 'type',
+ storedInternal: false,
+ url: 'url',
+ ...data,
+ })
+ .then(x => driveFilesRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ beforeAll(async () => {
+ app = await Test.createTestingModule({
+ imports: [
+ GlobalModule,
+ CoreModule,
+ ],
+ providers: [
+ GlobalEventService,
+ IdService,
+ ChannelFollowingService,
+ ],
+ }).compile();
+
+ app.enableShutdownHooks();
+
+ service = app.get(ChannelFollowingService);
+ idService = app.get(IdService);
+ channelsRepository = app.get(DI.channelsRepository);
+ channelFollowingsRepository = app.get(DI.channelFollowingsRepository);
+ usersRepository = app.get(DI.usersRepository);
+ userProfilesRepository = app.get(DI.userProfilesRepository);
+ driveFilesRepository = app.get(DI.driveFilesRepository);
+ });
+
+ afterAll(async () => {
+ await app.close();
+ });
+
+ beforeEach(async () => {
+ alice = { ...await createUser({ username: 'alice' }), host: null, uri: null };
+ bob = { ...await createUser({ username: 'bob' }), host: null, uri: null };
+ driveFile1 = await createDriveFile();
+ driveFile2 = await createDriveFile();
+ channel1 = await createChannel({ name: 'channel1', userId: alice.id, bannerId: driveFile1.id });
+ channel2 = await createChannel({ name: 'channel2', userId: alice.id, bannerId: driveFile2.id });
+ channel3 = await createChannel({ name: 'channel3', userId: alice.id, bannerId: driveFile2.id });
+ });
+
+ afterEach(async () => {
+ await channelFollowingsRepository.deleteAll();
+ await channelsRepository.deleteAll();
+ await userProfilesRepository.deleteAll();
+ await usersRepository.deleteAll();
+ });
+
+ describe('list', () => {
+ test('default', async () => {
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel1.id });
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel2.id });
+ await createChannelFollowing({ followerId: bob.id, followeeId: channel3.id });
+
+ const followings = await service.list({ requestUserId: alice.id });
+
+ expect(followings).toHaveLength(2);
+ expect(followings[0].id).toBe(channel1.id);
+ expect(followings[0].userId).toBe(alice.id);
+ expect(followings[0].user).toBeFalsy();
+ expect(followings[0].bannerId).toBe(driveFile1.id);
+ expect(followings[0].banner).toBeFalsy();
+ expect(followings[1].id).toBe(channel2.id);
+ expect(followings[1].userId).toBe(alice.id);
+ expect(followings[1].user).toBeFalsy();
+ expect(followings[1].bannerId).toBe(driveFile2.id);
+ expect(followings[1].banner).toBeFalsy();
+ });
+
+ test('idOnly', async () => {
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel1.id });
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel2.id });
+ await createChannelFollowing({ followerId: bob.id, followeeId: channel3.id });
+
+ const followings = await service.list({ requestUserId: alice.id }, { idOnly: true });
+
+ expect(followings).toHaveLength(2);
+ expect(followings[0].id).toBe(channel1.id);
+ expect(followings[1].id).toBe(channel2.id);
+ });
+
+ test('joinUser', async () => {
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel1.id });
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel2.id });
+ await createChannelFollowing({ followerId: bob.id, followeeId: channel3.id });
+
+ const followings = await service.list({ requestUserId: alice.id }, { joinUser: true });
+
+ expect(followings).toHaveLength(2);
+ expect(followings[0].id).toBe(channel1.id);
+ expect(followings[0].user).toEqual(alice);
+ expect(followings[0].banner).toBeFalsy();
+ expect(followings[1].id).toBe(channel2.id);
+ expect(followings[1].user).toEqual(alice);
+ expect(followings[1].banner).toBeFalsy();
+ });
+
+ test('joinBannerFile', async () => {
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel1.id });
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel2.id });
+ await createChannelFollowing({ followerId: bob.id, followeeId: channel3.id });
+
+ const followings = await service.list({ requestUserId: alice.id }, { joinBannerFile: true });
+
+ expect(followings).toHaveLength(2);
+ expect(followings[0].id).toBe(channel1.id);
+ expect(followings[0].user).toBeFalsy();
+ expect(followings[0].banner).toEqual(driveFile1);
+ expect(followings[1].id).toBe(channel2.id);
+ expect(followings[1].user).toBeFalsy();
+ expect(followings[1].banner).toEqual(driveFile2);
+ });
+ });
+
+ describe('follow', () => {
+ test('default', async () => {
+ await service.follow(alice, channel1);
+
+ const followings = await fetchChannelFollowing();
+
+ expect(followings).toHaveLength(1);
+ expect(followings[0].followeeId).toBe(channel1.id);
+ expect(followings[0].followerId).toBe(alice.id);
+ });
+ });
+
+ describe('unfollow', () => {
+ test('default', async () => {
+ await createChannelFollowing({ followerId: alice.id, followeeId: channel1.id });
+
+ await service.unfollow(alice, channel1);
+
+ const followings = await fetchChannelFollowing();
+
+ expect(followings).toHaveLength(0);
+ });
+ });
+});
diff --git a/packages/backend/test/unit/ChannelMutingService.ts b/packages/backend/test/unit/ChannelMutingService.ts
new file mode 100644
index 0000000000..6916701d1f
--- /dev/null
+++ b/packages/backend/test/unit/ChannelMutingService.ts
@@ -0,0 +1,336 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/* eslint-disable */
+
+import { afterEach, beforeEach, describe, expect } from '@jest/globals';
+import { Test, TestingModule } from '@nestjs/testing';
+import { GlobalModule } from '@/GlobalModule.js';
+import { CoreModule } from '@/core/CoreModule.js';
+import { GlobalEventService } from '@/core/GlobalEventService.js';
+import { IdService } from '@/core/IdService.js';
+import { ChannelMutingService } from '@/core/ChannelMutingService.js';
+import {
+ ChannelMutingRepository,
+ ChannelsRepository,
+ DriveFilesRepository,
+ MiChannel,
+ MiChannelMuting,
+ MiDriveFile,
+ MiUser,
+ UserProfilesRepository,
+ UsersRepository,
+} from '@/models/_.js';
+import { DI } from '@/di-symbols.js';
+import { setTimeout } from 'node:timers/promises';
+
+describe('ChannelMutingService', () => {
+ let app: TestingModule;
+ let service: ChannelMutingService;
+ let channelsRepository: ChannelsRepository;
+ let channelMutingRepository: ChannelMutingRepository;
+ let usersRepository: UsersRepository;
+ let userProfilesRepository: UserProfilesRepository;
+ let driveFilesRepository: DriveFilesRepository;
+ let idService: IdService;
+
+ let alice: MiUser;
+ let bob: MiUser;
+ let channel1: MiChannel;
+ let channel2: MiChannel;
+ let channel3: MiChannel;
+ let driveFile1: MiDriveFile;
+ let driveFile2: MiDriveFile;
+
+ async function createUser(data: Partial = {}) {
+ const user = await usersRepository
+ .insert({
+ id: idService.gen(),
+ username: 'username',
+ usernameLower: 'username',
+ ...data,
+ })
+ .then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
+
+ await userProfilesRepository.insert({
+ userId: user.id,
+ });
+
+ return user;
+ }
+
+ async function createChannel(data: Partial = {}) {
+ return await channelsRepository
+ .insert({
+ id: idService.gen(),
+ ...data,
+ })
+ .then(x => channelsRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ async function createChannelMuting(data: Partial = {}) {
+ return await channelMutingRepository
+ .insert({
+ id: idService.gen(),
+ ...data,
+ })
+ .then(x => channelMutingRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ async function fetchChannelMuting() {
+ return await channelMutingRepository.findBy({});
+ }
+
+ async function createDriveFile(data: Partial = {}) {
+ return await driveFilesRepository
+ .insert({
+ id: idService.gen(),
+ md5: 'md5',
+ name: 'name',
+ size: 0,
+ type: 'type',
+ storedInternal: false,
+ url: 'url',
+ ...data,
+ })
+ .then(x => driveFilesRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ beforeAll(async () => {
+ app = await Test.createTestingModule({
+ imports: [
+ GlobalModule,
+ CoreModule,
+ ],
+ providers: [
+ GlobalEventService,
+ IdService,
+ ChannelMutingService,
+ ],
+ }).compile();
+
+ app.enableShutdownHooks();
+
+ service = app.get(ChannelMutingService);
+ idService = app.get(IdService);
+ channelsRepository = app.get(DI.channelsRepository);
+ channelMutingRepository = app.get(DI.channelMutingRepository);
+ usersRepository = app.get(DI.usersRepository);
+ userProfilesRepository = app.get(DI.userProfilesRepository);
+ driveFilesRepository = app.get(DI.driveFilesRepository);
+ });
+
+ afterAll(async () => {
+ await app.close();
+ });
+
+ beforeEach(async () => {
+ alice = await createUser({ username: 'alice' });
+ bob = await createUser({ username: 'bob' });
+ driveFile1 = await createDriveFile();
+ driveFile2 = await createDriveFile();
+ channel1 = await createChannel({ name: 'channel1', userId: alice.id, bannerId: driveFile1.id });
+ channel2 = await createChannel({ name: 'channel2', userId: alice.id, bannerId: driveFile2.id });
+ channel3 = await createChannel({ name: 'channel3', userId: alice.id, bannerId: driveFile2.id });
+ });
+
+ afterEach(async () => {
+ await channelMutingRepository.deleteAll();
+ await channelsRepository.deleteAll();
+ await userProfilesRepository.deleteAll();
+ await usersRepository.deleteAll();
+ });
+
+ describe('list', () => {
+ test('default', async () => {
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id });
+ await createChannelMuting({ userId: bob.id, channelId: channel3.id });
+
+ const mutings = await service.list({ requestUserId: alice.id });
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].id).toBe(channel1.id);
+ expect(mutings[0].userId).toBe(alice.id);
+ expect(mutings[0].user).toBeFalsy();
+ expect(mutings[0].bannerId).toBe(driveFile1.id);
+ expect(mutings[0].banner).toBeFalsy();
+ expect(mutings[1].id).toBe(channel2.id);
+ expect(mutings[1].userId).toBe(alice.id);
+ expect(mutings[1].user).toBeFalsy();
+ expect(mutings[1].bannerId).toBe(driveFile2.id);
+ expect(mutings[1].banner).toBeFalsy();
+ });
+
+ test('withoutExpires', async () => {
+ const now = new Date();
+ const past = new Date(now);
+ const future = new Date(now);
+ past.setMinutes(past.getMinutes() - 1);
+ future.setMinutes(future.getMinutes() + 1);
+
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id, expiresAt: past });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id, expiresAt: null });
+ await createChannelMuting({ userId: alice.id, channelId: channel3.id, expiresAt: future });
+
+ const mutings = await service.list({ requestUserId: alice.id });
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].id).toBe(channel2.id);
+ expect(mutings[1].id).toBe(channel3.id);
+ });
+
+ test('idOnly', async () => {
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id });
+ await createChannelMuting({ userId: bob.id, channelId: channel3.id });
+
+ const mutings = await service.list({ requestUserId: alice.id }, { idOnly: true });
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].id).toBe(channel1.id);
+ expect(mutings[1].id).toBe(channel2.id);
+ });
+
+ test('withoutExpires-idOnly', async () => {
+ const now = new Date();
+ const past = new Date(now);
+ const future = new Date(now);
+ past.setMinutes(past.getMinutes() - 1);
+ future.setMinutes(future.getMinutes() + 1);
+
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id, expiresAt: past });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id, expiresAt: null });
+ await createChannelMuting({ userId: alice.id, channelId: channel3.id, expiresAt: future });
+
+ const mutings = await service.list({ requestUserId: alice.id }, { idOnly: true });
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].id).toBe(channel2.id);
+ expect(mutings[1].id).toBe(channel3.id);
+ });
+
+ test('joinUser', async () => {
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id });
+ await createChannelMuting({ userId: bob.id, channelId: channel3.id });
+
+ const mutings = await service.list({ requestUserId: alice.id }, { joinUser: true });
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].id).toBe(channel1.id);
+ expect(mutings[0].user).toEqual(alice);
+ expect(mutings[0].banner).toBeFalsy();
+ expect(mutings[1].id).toBe(channel2.id);
+ expect(mutings[1].user).toEqual(alice);
+ expect(mutings[1].banner).toBeFalsy();
+ });
+
+ test('joinBannerFile', async () => {
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id });
+ await createChannelMuting({ userId: bob.id, channelId: channel3.id });
+
+ const mutings = await service.list({ requestUserId: alice.id }, { joinBannerFile: true });
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].id).toBe(channel1.id);
+ expect(mutings[0].user).toBeFalsy();
+ expect(mutings[0].banner).toEqual(driveFile1);
+ expect(mutings[1].id).toBe(channel2.id);
+ expect(mutings[1].user).toBeFalsy();
+ expect(mutings[1].banner).toEqual(driveFile2);
+ });
+ });
+
+ describe('findExpiredMutings', () => {
+ test('default', async () => {
+ const now = new Date();
+ const future = new Date(now);
+ const past = new Date(now);
+ future.setMinutes(now.getMinutes() + 1);
+ past.setMinutes(now.getMinutes() - 1);
+
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id, expiresAt: past });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id, expiresAt: future });
+ await createChannelMuting({ userId: bob.id, channelId: channel3.id, expiresAt: past });
+
+ const mutings = await service.findExpiredMutings();
+
+ expect(mutings).toHaveLength(2);
+ expect(mutings[0].channelId).toBe(channel1.id);
+ expect(mutings[1].channelId).toBe(channel3.id);
+ });
+ });
+
+ describe('isMuted', () => {
+ test('isMuted: true', async () => {
+ // キャッシュを読むのでServiceの機能を使って登録し、キャッシュを作成する
+ await service.mute({ requestUserId: alice.id, targetChannelId: channel1.id });
+ await service.mute({ requestUserId: alice.id, targetChannelId: channel2.id });
+
+ await setTimeout(500);
+
+ const result = await service.isMuted({ requestUserId: alice.id, targetChannelId: channel1.id });
+
+ expect(result).toBe(true);
+ });
+
+ test('isMuted: false', async () => {
+ await service.mute({ requestUserId: alice.id, targetChannelId: channel2.id });
+
+ await setTimeout(500);
+
+ const result = await service.isMuted({ requestUserId: alice.id, targetChannelId: channel1.id });
+
+ expect(result).toBe(false);
+ });
+ });
+
+ describe('mute', () => {
+ test('default', async () => {
+ await service.mute({ requestUserId: alice.id, targetChannelId: channel1.id });
+
+ const muting = await fetchChannelMuting();
+ expect(muting).toHaveLength(1);
+ expect(muting[0].channelId).toBe(channel1.id);
+ });
+ });
+
+ describe('unmute', () => {
+ test('default', async () => {
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id });
+
+ let muting = await fetchChannelMuting();
+ expect(muting).toHaveLength(1);
+ expect(muting[0].channelId).toBe(channel1.id);
+
+ await service.unmute({ requestUserId: alice.id, targetChannelId: channel1.id });
+
+ muting = await fetchChannelMuting();
+ expect(muting).toHaveLength(0);
+ });
+ });
+
+ describe('eraseExpiredMutings', () => {
+ test('default', async () => {
+ const now = new Date();
+ const future = new Date(now);
+ const past = new Date(now);
+ future.setMinutes(now.getMinutes() + 1);
+ past.setMinutes(now.getMinutes() - 1);
+
+ await createChannelMuting({ userId: alice.id, channelId: channel1.id, expiresAt: past });
+ await createChannelMuting({ userId: alice.id, channelId: channel2.id, expiresAt: future });
+ await createChannelMuting({ userId: bob.id, channelId: channel3.id, expiresAt: past });
+
+ await service.eraseExpiredMutings();
+
+ const mutings = await fetchChannelMuting();
+ expect(mutings).toHaveLength(1);
+ expect(mutings[0].channelId).toBe(channel2.id);
+ });
+ });
+});
diff --git a/packages/backend/test/unit/DriveService.ts b/packages/backend/test/unit/DriveService.ts
index a89e037881..eafc49973b 100644
--- a/packages/backend/test/unit/DriveService.ts
+++ b/packages/backend/test/unit/DriveService.ts
@@ -54,7 +54,7 @@ describe('DriveService', () => {
s3Mock.on(DeleteObjectCommand)
.rejects(new InvalidObjectState({ $metadata: {}, message: '' }));
- await expect(driveService.deleteObjectStorageFile('unexpected')).rejects.toThrowError(Error);
+ await expect(driveService.deleteObjectStorageFile('unexpected')).rejects.toThrow(Error);
});
test('delete a file with no valid key', async () => {
diff --git a/packages/backend/test/unit/FileInfoService.ts b/packages/backend/test/unit/FileInfoService.ts
index 6cec79540d..d62a29dd7d 100644
--- a/packages/backend/test/unit/FileInfoService.ts
+++ b/packages/backend/test/unit/FileInfoService.ts
@@ -17,7 +17,7 @@ import { FileInfo, FileInfoService } from '@/core/FileInfoService.js';
import { AiService } from '@/core/AiService.js';
import { LoggerService } from '@/core/LoggerService.js';
import type { TestingModule } from '@nestjs/testing';
-import type { MockFunctionMetadata } from 'jest-mock';
+import type { MockMetadata } from 'jest-mock';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
@@ -54,7 +54,7 @@ describe('FileInfoService', () => {
// return { };
//}
if (typeof token === 'function') {
- const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata;
+ const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata;
const Mock = moduleMocker.generateFromMetadata(mockMetadata);
return new Mock();
}
diff --git a/packages/backend/test/unit/MfmService.ts b/packages/backend/test/unit/MfmService.ts
index 7395c737bd..358209b4d7 100644
--- a/packages/backend/test/unit/MfmService.ts
+++ b/packages/backend/test/unit/MfmService.ts
@@ -25,25 +25,25 @@ describe('MfmService', () => {
describe('toHtml', () => {
test('br', () => {
const input = 'foo\nbar\nbaz';
- const output = 'foo bar baz
';
+ const output = 'foo bar baz';
assert.equal(mfmService.toHtml(mfm.parse(input)), output);
});
test('br alt', () => {
const input = 'foo\r\nbar\rbaz';
- const output = 'foo bar baz
';
+ const output = 'foo bar baz';
assert.equal(mfmService.toHtml(mfm.parse(input)), output);
});
test('Do not generate unnecessary span', () => {
const input = 'foo $[tada bar]';
- const output = 'foo bar
';
+ const output = 'foo bar ';
assert.equal(mfmService.toHtml(mfm.parse(input)), output);
});
test('escape', () => {
const input = '```\nHello, world!
\n```';
- const output = '
<p>Hello, world!</p>
';
+ const output = '<p>Hello, world!</p> ';
assert.equal(mfmService.toHtml(mfm.parse(input)), output);
});
});
@@ -119,7 +119,7 @@ describe('MfmService', () => {
assert.deepStrictEqual(mfmService.fromHtml('a Misskey( ミス キー ) b c
'), 'a Misskey(ミス キー) b c');
assert.deepStrictEqual(
mfmService.fromHtml('a Misskey( ミスキー ) Misskey( ミス キー ) Misskey( ミスキー ) b
'),
- 'a Misskey(ミスキー)Misskey(ミス キー)Misskey(ミスキー) b'
+ 'a Misskey(ミスキー)Misskey(ミス キー)Misskey(ミスキー) b',
);
});
diff --git a/packages/backend/test/unit/NoteCreateService.ts b/packages/backend/test/unit/NoteCreateService.ts
index d3a22208f6..3e493fd3d9 100644
--- a/packages/backend/test/unit/NoteCreateService.ts
+++ b/packages/backend/test/unit/NoteCreateService.ts
@@ -62,6 +62,7 @@ describe('NoteCreateService', () => {
replyUserHost: null,
renoteUserId: null,
renoteUserHost: null,
+ renoteChannelId: null,
};
const poll: IPoll = {
diff --git a/packages/backend/test/unit/RelayService.ts b/packages/backend/test/unit/RelayService.ts
index 2bc1d04d09..a5329dbb49 100644
--- a/packages/backend/test/unit/RelayService.ts
+++ b/packages/backend/test/unit/RelayService.ts
@@ -10,7 +10,7 @@ import type { Mocked } from 'vitest';
import { Test } from '@nestjs/testing';
import { ModuleMocker } from 'jest-mock';
import type { TestingModule } from '@nestjs/testing';
-import type { MockFunctionMetadata } from 'jest-mock';
+import type { MockMetadata } from 'jest-mock';
import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { IdService } from '@/core/IdService.js';
@@ -46,7 +46,7 @@ describe('RelayService', () => {
return { deliver: vi.fn() };
}
if (typeof token === 'function') {
- const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata;
+ const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata;
const Mock = moduleMocker.generateFromMetadata(mockMetadata);
return new Mock();
}
diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts
index 2ce087e111..64e0858be3 100644
--- a/packages/backend/test/unit/RoleService.ts
+++ b/packages/backend/test/unit/RoleService.ts
@@ -12,7 +12,7 @@ import { ModuleMocker } from 'jest-mock';
import { Test } from '@nestjs/testing';
import * as lolex from '@sinonjs/fake-timers';
import type { TestingModule } from '@nestjs/testing';
-import type { MockFunctionMetadata } from 'jest-mock';
+import type { MockMetadata } from 'jest-mock';
import { GlobalModule } from '@/GlobalModule.js';
import { RoleService } from '@/core/RoleService.js';
import {
@@ -105,6 +105,7 @@ describe('RoleService', () => {
beforeEach(async () => {
clock = lolex.install({
+ // https://github.com/sinonjs/sinon/issues/2620
toFake: Object.keys(lolex.timers).filter((key) => !['nextTick', 'queueMicrotask'].includes(key)) as lolex.FakeMethod[],
now: new Date(),
shouldClearNativeTimers: true,
@@ -137,7 +138,7 @@ describe('RoleService', () => {
return { fetch: vi.fn() };
}
if (typeof token === 'function') {
- const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata;
+ const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata;
const Mock = moduleMocker.generateFromMetadata(mockMetadata);
return new Mock();
}
@@ -160,16 +161,75 @@ describe('RoleService', () => {
afterEach(async () => {
clock.uninstall();
+ /**
+ * Delete meta and roleAssignment first to avoid deadlock due to schema dependencies
+ * https://github.com/misskey-dev/misskey/issues/16783
+ */
+ await app.get(DI.metasRepository).createQueryBuilder().delete().execute();
+ await roleAssignmentsRepository.createQueryBuilder().delete().execute();
await Promise.all([
- app.get(DI.metasRepository).createQueryBuilder().delete().execute(),
usersRepository.createQueryBuilder().delete().execute(),
rolesRepository.createQueryBuilder().delete().execute(),
- roleAssignmentsRepository.createQueryBuilder().delete().execute(),
]);
await app.close();
});
+ describe('getUserAssigns', () => {
+ test('アサインされたロールを取得できる', async () => {
+ const user = await createUser();
+ const role1 = await createRole({ name: 'a' });
+ const role2 = await createRole({ name: 'b' });
+
+ await roleService.assign(user.id, role1.id);
+ await roleService.assign(user.id, role2.id);
+
+ const assigns = await roleService.getUserAssigns(user.id);
+ expect(assigns).toHaveLength(2);
+ expect(assigns.some(a => a.roleId === role1.id)).toBe(true);
+ expect(assigns.some(a => a.roleId === role2.id)).toBe(true);
+ });
+
+ test('アサインされたロールの有効/期限切れパターンを取得できる', async () => {
+ const user = await createUser();
+ const roleNoExpiry = await createRole({ name: 'no-expires' });
+ const roleNotExpired = await createRole({ name: 'not-expired' });
+ const roleExpired = await createRole({ name: 'expired' });
+
+ // expiresAtなし
+ await roleService.assign(user.id, roleNoExpiry.id);
+
+ // expiresAtあり(期限切れでない)
+ const future = new Date(Date.now() + 1000 * 60 * 60); // +1 hour
+ await roleService.assign(user.id, roleNotExpired.id, future);
+
+ // expiresAtあり(期限切れ)
+ await assignRole({ userId: user.id, roleId: roleExpired.id, expiresAt: new Date(Date.now() - 1000) });
+
+ const assigns = await roleService.getUserAssigns(user.id);
+ expect(assigns.some(a => a.roleId === roleNoExpiry.id)).toBe(true);
+ expect(assigns.some(a => a.roleId === roleNotExpired.id)).toBe(true);
+ expect(assigns.some(a => a.roleId === roleExpired.id)).toBe(false);
+ });
+ });
+
+ describe('getUserRoles', () => {
+ test('アサインされたロールとコンディショナルロールの両方が取得できる', async () => {
+ const user = await createUser();
+ const manualRole = await createRole({ name: 'manual role' });
+ const conditionalRole = await createConditionalRole({
+ id: aidx(),
+ type: 'isBot',
+ });
+ await roleService.assign(user.id, manualRole.id);
+ await roleService.assign(user.id, conditionalRole.id);
+
+ const roles = await roleService.getUserRoles(user.id);
+ expect(roles.some(r => r.id === manualRole.id)).toBe(true);
+ expect(roles.some(r => r.id === conditionalRole.id)).toBe(true);
+ });
+ });
+
describe('getUserPolicies', () => {
test('instance default policies', async () => {
const user = await createUser();
@@ -282,6 +342,112 @@ describe('RoleService', () => {
const resultAfter25hAgain = await roleService.getUserPolicies(user.id);
expect(resultAfter25hAgain.canManageCustomEmojis).toBe(true);
});
+
+ test('role with no policy set', async () => {
+ const user = await createUser();
+ const roleWithPolicy = await createRole({
+ name: 'roleWithPolicy',
+ policies: {
+ pinLimit: {
+ useDefault: false,
+ priority: 0,
+ value: 10,
+ },
+ },
+ });
+ const roleWithoutPolicy = await createRole({
+ name: 'roleWithoutPolicy',
+ policies: {}, // ポリシーが空
+ });
+ await roleService.assign(user.id, roleWithPolicy.id);
+ await roleService.assign(user.id, roleWithoutPolicy.id);
+ meta.policies = {
+ pinLimit: 5,
+ };
+
+ const result = await roleService.getUserPolicies(user.id);
+
+ // roleWithoutPolicy は default 値 (5) を使い、roleWithPolicy の 10 と比較して大きい方が採用される
+ expect(result.pinLimit).toBe(10);
+ });
+ });
+
+ describe('getUserBadgeRoles', () => {
+ test('手動アサイン済みのバッジロールのみが返る', async () => {
+ const user = await createUser();
+ const badgeRole = await createRole({ name: 'badge', asBadge: true });
+ const normalRole = await createRole({ name: 'normal', asBadge: false });
+
+ await roleService.assign(user.id, badgeRole.id);
+ await roleService.assign(user.id, normalRole.id);
+
+ const roles = await roleService.getUserBadgeRoles(user.id);
+ expect(roles.some(r => r.id === badgeRole.id)).toBe(true);
+ expect(roles.some(r => r.id === normalRole.id)).toBe(false);
+ });
+
+ test('コンディショナルなバッジロールが条件一致で返る', async () => {
+ const user = await createUser({ isBot: true });
+ const condBadgeRole = await createConditionalRole({
+ id: aidx(),
+ type: 'isBot',
+ }, { asBadge: true, name: 'cond-badge' });
+ const condNonBadgeRole = await createConditionalRole({
+ id: aidx(),
+ type: 'isBot',
+ }, { asBadge: false, name: 'cond-non-badge' });
+
+ const roles = await roleService.getUserBadgeRoles(user.id);
+ expect(roles.some(r => r.id === condBadgeRole.id)).toBe(true);
+ expect(roles.some(r => r.id === condNonBadgeRole.id)).toBe(false);
+ });
+
+ test('roleAssignedTo 条件のバッジロール: アサイン有無で変化する', async () => {
+ const [user1, user2] = await Promise.all([createUser(), createUser()]);
+ const manualRole = await createRole({ name: 'manual' });
+ const condBadgeRole = await createConditionalRole({
+ id: aidx(),
+ type: 'roleAssignedTo',
+ roleId: manualRole.id,
+ }, { asBadge: true, name: 'assigned-badge' });
+
+ await roleService.assign(user2.id, manualRole.id);
+
+ const [roles1, roles2] = await Promise.all([
+ roleService.getUserBadgeRoles(user1.id),
+ roleService.getUserBadgeRoles(user2.id),
+ ]);
+ expect(roles1.some(r => r.id === condBadgeRole.id)).toBe(false);
+ expect(roles2.some(r => r.id === condBadgeRole.id)).toBe(true);
+ });
+
+ test('期限切れのバッジロールは除外される', async () => {
+ const user = await createUser();
+ const roleNoExpiry = await createRole({ name: 'no-exp', asBadge: true });
+ const roleNotExpired = await createRole({ name: 'not-expired', asBadge: true });
+ const roleExpired = await createRole({ name: 'expired', asBadge: true });
+
+ // expiresAt なし
+ await roleService.assign(user.id, roleNoExpiry.id);
+
+ // expiresAt あり(期限切れでない)
+ const future = new Date(Date.now() + 1000 * 60 * 60); // +1 hour
+ await roleService.assign(user.id, roleNotExpired.id, future);
+
+ // expiresAt あり(期限切れ)
+ await assignRole({ userId: user.id, roleId: roleExpired.id, expiresAt: new Date(Date.now() - 1000) });
+
+ const rolesBefore = await roleService.getUserBadgeRoles(user.id);
+ expect(rolesBefore.some(r => r.id === roleNoExpiry.id)).toBe(true);
+ expect(rolesBefore.some(r => r.id === roleNotExpired.id)).toBe(true);
+ expect(rolesBefore.some(r => r.id === roleExpired.id)).toBe(false);
+
+ // 時間経過で roleNotExpired を失効させる
+ clock.tick('02:00:00');
+ const rolesAfter = await roleService.getUserBadgeRoles(user.id);
+ expect(rolesAfter.some(r => r.id === roleNoExpiry.id)).toBe(true);
+ expect(rolesAfter.some(r => r.id === roleNotExpired.id)).toBe(false);
+ });
});
describe('getModeratorIds', () => {
@@ -415,9 +581,9 @@ describe('RoleService', () => {
expect(result).toEqual([modeUser1.id, modeUser2.id, rootUser.id]);
});
- test('root has moderator role', async () => {
- const [adminUser1, modeUser1, normalUser1, rootUser] = await Promise.all([
- createUser(), createUser(), createUser(), createRoot(),
+ test('includeAdmins = false, includeRoot = true, excludeExpire = true', async () => {
+ const [adminUser1, adminUser2, modeUser1, modeUser2, normalUser1, normalUser2, rootUser] = await Promise.all([
+ createUser(), createUser(), createUser(), createUser(), createUser(), createUser(), createRoot(),
]);
const role1 = await createRole({ name: 'admin', isAdministrator: true });
@@ -426,9 +592,11 @@ describe('RoleService', () => {
await Promise.all([
assignRole({ userId: adminUser1.id, roleId: role1.id }),
+ assignRole({ userId: adminUser2.id, roleId: role1.id, expiresAt: new Date(Date.now() - 1000) }),
assignRole({ userId: modeUser1.id, roleId: role2.id }),
- assignRole({ userId: rootUser.id, roleId: role2.id }),
+ assignRole({ userId: modeUser2.id, roleId: role2.id, expiresAt: new Date(Date.now() - 1000) }),
assignRole({ userId: normalUser1.id, roleId: role3.id }),
+ assignRole({ userId: normalUser2.id, roleId: role3.id, expiresAt: new Date(Date.now() - 1000) }),
]);
const result = await roleService.getModeratorIds({
@@ -436,12 +604,12 @@ describe('RoleService', () => {
includeRoot: true,
excludeExpire: false,
});
- expect(result).toEqual([modeUser1.id, rootUser.id]);
+ expect(result).toEqual([modeUser1.id, modeUser2.id, rootUser.id]);
});
- test('root has administrator role', async () => {
- const [adminUser1, modeUser1, normalUser1, rootUser] = await Promise.all([
- createUser(), createUser(), createUser(), createRoot(),
+ test('includeAdmins = true, includeRoot = true, excludeExpire = false', async () => {
+ const [adminUser1, adminUser2, modeUser1, modeUser2, normalUser1, normalUser2, rootUser] = await Promise.all([
+ createUser(), createUser(), createUser(), createUser(), createUser(), createUser(), createRoot(),
]);
const role1 = await createRole({ name: 'admin', isAdministrator: true });
@@ -450,9 +618,11 @@ describe('RoleService', () => {
await Promise.all([
assignRole({ userId: adminUser1.id, roleId: role1.id }),
- assignRole({ userId: rootUser.id, roleId: role1.id }),
+ assignRole({ userId: adminUser2.id, roleId: role1.id, expiresAt: new Date(Date.now() - 1000) }),
assignRole({ userId: modeUser1.id, roleId: role2.id }),
+ assignRole({ userId: modeUser2.id, roleId: role2.id, expiresAt: new Date(Date.now() - 1000) }),
assignRole({ userId: normalUser1.id, roleId: role3.id }),
+ assignRole({ userId: normalUser2.id, roleId: role3.id, expiresAt: new Date(Date.now() - 1000) }),
]);
const result = await roleService.getModeratorIds({
@@ -460,12 +630,12 @@ describe('RoleService', () => {
includeRoot: true,
excludeExpire: false,
});
- expect(result).toEqual([adminUser1.id, modeUser1.id, rootUser.id]);
+ expect(result).toEqual([adminUser1.id, adminUser2.id, modeUser1.id, modeUser2.id, rootUser.id]);
});
- test('root has moderator role(expire)', async () => {
- const [adminUser1, modeUser1, normalUser1, rootUser] = await Promise.all([
- createUser(), createUser(), createUser(), createRoot(),
+ test('includeAdmins = true, includeRoot = true, excludeExpire = true', async () => {
+ const [adminUser1, adminUser2, modeUser1, modeUser2, normalUser1, normalUser2, rootUser] = await Promise.all([
+ createUser(), createUser(), createUser(), createUser(), createUser(), createUser(), createRoot(),
]);
const role1 = await createRole({ name: 'admin', isAdministrator: true });
@@ -474,17 +644,71 @@ describe('RoleService', () => {
await Promise.all([
assignRole({ userId: adminUser1.id, roleId: role1.id }),
- assignRole({ userId: modeUser1.id, roleId: role2.id, expiresAt: new Date(Date.now() - 1000) }),
- assignRole({ userId: rootUser.id, roleId: role2.id, expiresAt: new Date(Date.now() - 1000) }),
+ assignRole({ userId: adminUser2.id, roleId: role1.id, expiresAt: new Date(Date.now() - 1000) }),
+ assignRole({ userId: modeUser1.id, roleId: role2.id }),
+ assignRole({ userId: modeUser2.id, roleId: role2.id, expiresAt: new Date(Date.now() - 1000) }),
assignRole({ userId: normalUser1.id, roleId: role3.id }),
+ assignRole({ userId: normalUser2.id, roleId: role3.id, expiresAt: new Date(Date.now() - 1000) }),
]);
const result = await roleService.getModeratorIds({
- includeAdmins: false,
+ includeAdmins: true,
includeRoot: true,
excludeExpire: true,
});
- expect(result).toEqual([rootUser.id]);
+ expect(result).toEqual([adminUser1.id, modeUser1.id, rootUser.id]);
+ });
+ });
+
+ describe('getAdministratorIds', () => {
+ test('should return only user IDs with administrator roles', async () => {
+ const adminUser1 = await createUser();
+ const adminUser2 = await createUser();
+ const normalUser = await createUser();
+ const moderatorUser = await createUser();
+
+ const adminRole = await createRole({ name: 'admin', isAdministrator: true, isModerator: false });
+ const moderatorRole = await createRole({ name: 'moderator', isModerator: true, isAdministrator: false });
+ const normalRole = await createRole({ name: 'normal', isAdministrator: false, isModerator: false });
+
+ await roleService.assign(adminUser1.id, adminRole.id);
+ await roleService.assign(adminUser2.id, adminRole.id);
+ await roleService.assign(moderatorUser.id, moderatorRole.id);
+ await roleService.assign(normalUser.id, normalRole.id);
+
+ const adminIds = await roleService.getAdministratorIds();
+
+ // sort for deterministic order
+ adminIds.sort();
+ const expectedIds = [adminUser1.id, adminUser2.id].sort();
+
+ expect(adminIds).toEqual(expectedIds);
+ });
+
+ test('should return an empty array if no users have administrator roles', async () => {
+ const normalUser = await createUser();
+ const normalRole = await createRole({ name: 'normal', isAdministrator: false });
+ await roleService.assign(normalUser.id, normalRole.id);
+
+ const adminIds = await roleService.getAdministratorIds();
+
+ expect(adminIds).toHaveLength(0);
+ });
+
+ test('should return an empty array if there are no administrator roles defined', async () => {
+ await createUser(); // create user to ensure not empty db
+ const adminIds = await roleService.getAdministratorIds();
+ expect(adminIds).toHaveLength(0);
+ });
+
+ // TODO: rootユーザーは現在実装に含まれていないため、テストもそれに倣う
+ test('should not include the root user', async () => {
+ const rootUser = await createUser();
+ meta.rootUserId = rootUser.id;
+
+ const adminIds = await roleService.getAdministratorIds();
+
+ expect(adminIds).not.toContain(rootUser.id);
});
});
diff --git a/packages/backend/test/unit/S3Service.ts b/packages/backend/test/unit/S3Service.ts
index e40e5a81ce..dce1e2065d 100644
--- a/packages/backend/test/unit/S3Service.ts
+++ b/packages/backend/test/unit/S3Service.ts
@@ -73,7 +73,7 @@ describe('S3Service', () => {
Bucket: 'fake',
Key: 'fake',
Body: 'x',
- })).rejects.toThrowError(Error);
+ })).rejects.toThrow(Error);
});
test('upload a large file error', async () => {
@@ -83,7 +83,7 @@ describe('S3Service', () => {
Bucket: 'fake',
Key: 'fake',
Body: 'x'.repeat(8 * 1024 * 1024 + 1), // デフォルトpartSizeにしている 8 * 1024 * 1024 を越えるサイズ
- })).rejects.toThrowError(Error);
+ })).rejects.toThrow(Error);
});
});
});
diff --git a/packages/backend/test/unit/SigninWithPasskeyApiService.ts b/packages/backend/test/unit/SigninWithPasskeyApiService.ts
index caa5337e93..05d1fb0453 100644
--- a/packages/backend/test/unit/SigninWithPasskeyApiService.ts
+++ b/packages/backend/test/unit/SigninWithPasskeyApiService.ts
@@ -9,7 +9,7 @@ import { Test, TestingModule } from '@nestjs/testing';
import { FastifyReply, FastifyRequest } from 'fastify';
import { AuthenticationResponseJSON } from '@simplewebauthn/types';
import { HttpHeader } from 'fastify/types/utils.js';
-import { MockFunctionMetadata, ModuleMocker } from 'jest-mock';
+import { MockMetadata, ModuleMocker } from 'jest-mock';
import { MiUser } from '@/models/User.js';
import { MiUserProfile, UserProfilesRepository, UsersRepository } from '@/models/_.js';
import { IdService } from '@/core/IdService.js';
@@ -95,7 +95,7 @@ describe('SigninWithPasskeyApiService', () => {
],
}).useMocker((token) => {
if (typeof token === 'function') {
- const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata;
+ const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata;
const Mock = moduleMocker.generateFromMetadata(mockMetadata);
return new Mock();
}
diff --git a/packages/backend/test/unit/chart.ts b/packages/backend/test/unit/chart.ts
index 0f2acde56b..5de17c2803 100644
--- a/packages/backend/test/unit/chart.ts
+++ b/packages/backend/test/unit/chart.ts
@@ -10,6 +10,7 @@ import { describe, beforeEach, afterEach, afterAll, test } from 'vitest';
import type { Mocked } from 'vitest';
import * as lolex from '@sinonjs/fake-timers';
import { DataSource } from 'typeorm';
+import * as Redis from 'ioredis';
import TestChart from '@/core/chart/charts/test.js';
import TestGroupedChart from '@/core/chart/charts/test-grouped.js';
import TestUniqueChart from '@/core/chart/charts/test-unique.js';
@@ -19,16 +20,16 @@ import { entity as TestGroupedChartEntity } from '@/core/chart/charts/entities/t
import { entity as TestUniqueChartEntity } from '@/core/chart/charts/entities/test-unique.js';
import { entity as TestIntersectionChartEntity } from '@/core/chart/charts/entities/test-intersection.js';
import { loadConfig } from '@/config.js';
-import type { AppLockService } from '@/core/AppLockService.js';
import Logger from '@/logger.js';
describe('Chart', () => {
const config = loadConfig();
- const appLockService = {
- getChartInsertLock: () => () => Promise.resolve(() => {}),
- } as unknown as Mocked;
let db: DataSource | undefined;
+ let redisClient = {
+ set: () => Promise.resolve('OK'),
+ get: () => Promise.resolve(null),
+ } as unknown as jest.Mocked;
let testChart: TestChart;
let testGroupedChart: TestGroupedChart;
@@ -65,12 +66,13 @@ describe('Chart', () => {
await db.initialize();
const logger = new Logger('chart'); // TODO: モックにする
- testChart = new TestChart(db, appLockService, logger);
- testGroupedChart = new TestGroupedChart(db, appLockService, logger);
- testUniqueChart = new TestUniqueChart(db, appLockService, logger);
- testIntersectionChart = new TestIntersectionChart(db, appLockService, logger);
+ testChart = new TestChart(db, redisClient, logger);
+ testGroupedChart = new TestGroupedChart(db, redisClient, logger);
+ testUniqueChart = new TestUniqueChart(db, redisClient, logger);
+ testIntersectionChart = new TestIntersectionChart(db, redisClient, logger);
clock = lolex.install({
+ // https://github.com/sinonjs/sinon/issues/2620
toFake: Object.keys(lolex.timers).filter((key) => !['nextTick', 'queueMicrotask'].includes(key)) as lolex.FakeMethod[],
now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0)),
shouldClearNativeTimers: true,
diff --git a/packages/backend/test/unit/misc/is-renote.ts b/packages/backend/test/unit/misc/is-renote.ts
index e095f3bf9f..4be3b4992b 100644
--- a/packages/backend/test/unit/misc/is-renote.ts
+++ b/packages/backend/test/unit/misc/is-renote.ts
@@ -45,6 +45,7 @@ const base: MiNote = {
replyUserHost: null,
renoteUserId: null,
renoteUserHost: null,
+ renoteChannelId: null,
};
describe('misc:is-renote', () => {
diff --git a/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts b/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts
index ceb7fa930a..a18fe914e3 100644
--- a/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts
+++ b/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts
@@ -142,6 +142,7 @@ describe('CheckModeratorsActivityProcessorService', () => {
beforeEach(async () => {
clock = lolex.install({
+ // https://github.com/sinonjs/sinon/issues/2620
toFake: Object.keys(lolex.timers).filter((key) => !['nextTick', 'queueMicrotask'].includes(key)) as lolex.FakeMethod[],
now: new Date(baseDate),
shouldClearNativeTimers: true,
diff --git a/packages/backend/test/utils.ts b/packages/backend/test/utils.ts
index ace614115c..ecca28b5af 100644
--- a/packages/backend/test/utils.ts
+++ b/packages/backend/test/utils.ts
@@ -10,8 +10,8 @@ import { randomUUID } from 'node:crypto';
import { inspect } from 'node:util';
import WebSocket, { ClientOptions } from 'ws';
import fetch, { File, RequestInit, type Headers } from 'node-fetch';
+import * as htmlParser from 'node-html-parser';
import { DataSource } from 'typeorm';
-import { JSDOM } from 'jsdom';
import { type Response } from 'node-fetch';
import Fastify from 'fastify';
import { entities } from '../src/postgres.js';
@@ -316,8 +316,12 @@ export const uploadFile = async (user?: UserToken, { path, name, blob }: UploadO
: new URL(path, new URL('resources/', import.meta.url));
const formData = new FormData();
- formData.append('file', blob ??
- new File([new Uint8Array(await readFile(absPath))], basename(absPath.toString())));
+ formData.append(
+ 'file',
+ blob ?? new Blob([new Uint8Array(await readFile(absPath))]),
+ basename(absPath.toString()),
+ );
+
formData.append('force', 'true');
if (name) {
formData.append('name', name);
@@ -464,7 +468,7 @@ export function makeStreamCatcher(
export type SimpleGetResponse = {
status: number,
- body: any | JSDOM | null,
+ body: any | null,
type: string | null,
location: string | null
};
@@ -495,7 +499,7 @@ export const simpleGet = async (path: string, accept = '*/*', cookie: any = unde
const body =
jsonTypes.includes(res.headers.get('content-type') ?? '') ? await res.json() :
- htmlTypes.includes(res.headers.get('content-type') ?? '') ? new JSDOM(await res.text()) :
+ htmlTypes.includes(res.headers.get('content-type') ?? '') ? htmlParser.parse(await res.text()) :
await bodyExtractor(res);
return {
diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json
index 2b15a5cc7a..25584e475d 100644
--- a/packages/backend/tsconfig.json
+++ b/packages/backend/tsconfig.json
@@ -23,12 +23,17 @@
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"isolatedModules": true,
+ "jsx": "react-jsx",
+ "jsxImportSource": "@kitajs/html",
"rootDir": "./src",
"baseUrl": "./",
"paths": {
"@/*": ["./src/*"]
},
"outDir": "./built",
+ "plugins": [
+ {"name": "@kitajs/ts-html-plugin"}
+ ],
"types": [
"node"
],
@@ -43,7 +48,8 @@
},
"compileOnSave": false,
"include": [
- "./src/**/*.ts"
+ "./src/**/*.ts",
+ "./src/**/*.tsx"
],
"exclude": [
"./src/**/*.test.ts"
diff --git a/packages/frontend-builder/locale-inliner.ts b/packages/frontend-builder/locale-inliner.ts
index 9bef465eeb..191d7250a6 100644
--- a/packages/frontend-builder/locale-inliner.ts
+++ b/packages/frontend-builder/locale-inliner.ts
@@ -10,7 +10,7 @@ import { collectModifications } from './locale-inliner/collect-modifications.js'
import { applyWithLocale } from './locale-inliner/apply-with-locale.js';
import { blankLogger } from './logger.js';
import type { Logger } from './logger.js';
-import type { Locale } from '../../locales/index.js';
+import type { Locale } from 'i18n';
import type { Manifest as ViteManifest } from 'vite';
export class LocaleInliner {
diff --git a/packages/frontend-builder/locale-inliner/apply-with-locale.ts b/packages/frontend-builder/locale-inliner/apply-with-locale.ts
index 5e601cdf12..78851d3029 100644
--- a/packages/frontend-builder/locale-inliner/apply-with-locale.ts
+++ b/packages/frontend-builder/locale-inliner/apply-with-locale.ts
@@ -5,7 +5,7 @@
import MagicString from 'magic-string';
import { assertNever } from '../utils.js';
-import type { Locale, ILocale } from '../../../locales/index.js';
+import type { ILocale, Locale } from 'i18n';
import type { TextModification } from '../locale-inliner.js';
import type { Logger } from '../logger.js';
diff --git a/packages/frontend-builder/package.json b/packages/frontend-builder/package.json
index 320e8b9cec..37dd133fe6 100644
--- a/packages/frontend-builder/package.json
+++ b/packages/frontend-builder/package.json
@@ -11,15 +11,16 @@
},
"devDependencies": {
"@types/estree": "1.0.8",
- "@types/node": "22.18.10",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1",
- "rollup": "4.52.4",
+ "@types/node": "24.10.1",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "rollup": "4.53.3",
"typescript": "5.9.3"
},
"dependencies": {
+ "i18n": "workspace:*",
"estree-walker": "3.0.3",
- "magic-string": "0.30.19",
- "vite": "7.1.9"
+ "magic-string": "0.30.21",
+ "vite": "7.2.4"
}
}
diff --git a/packages/frontend-embed/build.ts b/packages/frontend-embed/build.ts
index 737233a4d0..4e1f588802 100644
--- a/packages/frontend-embed/build.ts
+++ b/packages/frontend-embed/build.ts
@@ -2,7 +2,7 @@ import * as fs from 'fs/promises';
import url from 'node:url';
import path from 'node:path';
import { execa } from 'execa';
-import locales from '../../locales/index.js';
+import locales from 'i18n';
import { LocaleInliner } from '../frontend-builder/locale-inliner.js'
import { createLogger } from '../frontend-builder/logger';
diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json
index d4c922695b..c27583cf86 100644
--- a/packages/frontend-embed/package.json
+++ b/packages/frontend-embed/package.json
@@ -11,12 +11,13 @@
},
"dependencies": {
"@discordapp/twemoji": "16.0.1",
+ "i18n": "workspace:*",
"@rollup/plugin-json": "6.1.0",
- "@rollup/plugin-replace": "6.0.2",
+ "@rollup/plugin-replace": "6.0.3",
"@rollup/pluginutils": "5.3.0",
"@twemoji/parser": "16.0.0",
- "@vitejs/plugin-vue": "6.0.1",
- "@vue/compiler-sfc": "3.5.22",
+ "@vitejs/plugin-vue": "6.0.2",
+ "@vue/compiler-sfc": "3.5.24",
"astring": "1.9.0",
"buraha": "0.0.1",
"estree-walker": "3.0.3",
@@ -26,47 +27,47 @@
"mfm-js": "0.25.0",
"misskey-js": "workspace:*",
"punycode.js": "2.3.1",
- "rollup": "4.52.4",
- "sass": "1.93.2",
- "shiki": "3.13.0",
+ "rollup": "4.53.3",
+ "sass": "1.94.2",
+ "shiki": "3.15.0",
"tinycolor2": "1.6.0",
"tsc-alias": "1.8.16",
"tsconfig-paths": "4.2.0",
"typescript": "5.9.3",
"uuid": "13.0.0",
- "vite": "7.1.9",
- "vue": "3.5.22"
+ "vite": "7.2.4",
+ "vue": "3.5.24"
},
"devDependencies": {
- "@misskey-dev/summaly": "5.2.4",
+ "@misskey-dev/summaly": "5.2.5",
"@tabler/icons-webfont": "3.35.0",
"@testing-library/vue": "8.1.0",
"@types/estree": "1.0.8",
- "@types/micromatch": "4.0.9",
- "@types/node": "22.18.10",
+ "@types/micromatch": "4.0.10",
+ "@types/node": "24.10.1",
"@types/punycode.js": "npm:@types/punycode@2.1.4",
"@types/tinycolor2": "1.4.6",
"@types/ws": "8.18.1",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1",
- "@vitest/coverage-v8": "3.2.4",
- "@vue/runtime-core": "3.5.22",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "@vitest/coverage-v8": "4.0.13",
+ "@vue/runtime-core": "3.5.24",
"acorn": "8.15.0",
"cross-env": "10.1.0",
"eslint-plugin-import": "2.32.0",
- "eslint-plugin-vue": "10.5.0",
+ "eslint-plugin-vue": "10.6.0",
"fast-glob": "3.3.3",
- "happy-dom": "20.0.7",
+ "happy-dom": "20.0.10",
"intersection-observer": "0.12.2",
"micromatch": "4.0.8",
- "msw": "2.11.5",
- "nodemon": "3.1.10",
+ "msw": "2.12.2",
+ "nodemon": "3.1.11",
"prettier": "3.6.2",
- "start-server-and-test": "2.1.2",
+ "start-server-and-test": "2.1.3",
"tsx": "4.20.6",
"vite-plugin-turbosnap": "1.0.3",
- "vue-component-type-helpers": "3.1.1",
+ "vue-component-type-helpers": "3.1.5",
"vue-eslint-parser": "10.2.0",
- "vue-tsc": "3.1.1"
+ "vue-tsc": "3.1.5"
}
}
diff --git a/packages/backend/src/server/web/boot.embed.js b/packages/frontend-embed/public/loader/boot.js
similarity index 99%
rename from packages/backend/src/server/web/boot.embed.js
rename to packages/frontend-embed/public/loader/boot.js
index 022ff064ad..ba6366b3db 100644
--- a/packages/backend/src/server/web/boot.embed.js
+++ b/packages/frontend-embed/public/loader/boot.js
@@ -55,7 +55,7 @@
//#region Script
async function importAppScript() {
- await import(CLIENT_ENTRY ? `/embed_vite/${CLIENT_ENTRY.replace('scripts', lang)}` : '/embed_vite/src/_boot_.ts')
+ await import(CLIENT_ENTRY ? `/embed_vite/${CLIENT_ENTRY.replace('scripts', lang)}` : '/embed_vite/src/boot.ts')
.catch(async e => {
console.error(e);
renderError('APP_IMPORT');
diff --git a/packages/backend/src/server/web/style.embed.css b/packages/frontend-embed/public/loader/style.css
similarity index 100%
rename from packages/backend/src/server/web/style.embed.css
rename to packages/frontend-embed/public/loader/style.css
diff --git a/packages/frontend-embed/src/components/I18n.vue b/packages/frontend-embed/src/components/I18n.vue
index b621110ec9..9866e50958 100644
--- a/packages/frontend-embed/src/components/I18n.vue
+++ b/packages/frontend-embed/src/components/I18n.vue
@@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkImageEffectorDialog.vue b/packages/frontend/src/components/MkImageEffectorDialog.vue
index 19ddb81919..3d7801f925 100644
--- a/packages/frontend/src/components/MkImageEffectorDialog.vue
+++ b/packages/frontend/src/components/MkImageEffectorDialog.vue
@@ -18,7 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ i18n.ts.preview }}
@@ -64,6 +64,7 @@ import * as os from '@/os.js';
import { deepClone } from '@/utility/clone.js';
import { FXS } from '@/utility/image-effector/fxs.js';
import { genId } from '@/utility/id.js';
+import { prefer } from '@/preferences.js';
const props = defineProps<{
image: File;
@@ -94,19 +95,19 @@ const layers = reactive
([]);
watch(layers, async () => {
if (renderer != null) {
- renderer.setLayers(layers);
+ renderer.render(layers);
}
}, { deep: true });
function addEffect(ev: MouseEvent) {
- os.popupMenu(FXS.map((fx) => ({
- text: fx.name,
+ os.popupMenu(Object.entries(FXS).map(([id, fx]) => ({
+ text: fx.uiDefinition.name,
action: () => {
layers.push({
id: genId(),
- fxId: fx.id,
- params: Object.fromEntries(Object.entries(fx.params).map(([k, v]) => [k, v.default])),
- });
+ fxId: id as keyof typeof FXS,
+ params: Object.fromEntries(Object.entries(fx.uiDefinition.params).map(([k, v]) => [k, v.default])),
+ } as ImageEffectorLayer);
},
})), ev.currentTarget ?? ev.target);
}
@@ -136,7 +137,7 @@ function onLayerDelete(layer: ImageEffectorLayer) {
const canvasEl = useTemplateRef('canvasEl');
-let renderer: ImageEffector | null = null;
+let renderer: ImageEffector | null = null;
let imageBitmap: ImageBitmap | null = null;
onMounted(async () => {
@@ -146,31 +147,36 @@ onMounted(async () => {
await nextTick(); // waitingがレンダリングされるまで待つ
- imageBitmap = await window.createImageBitmap(props.image);
+ try {
+ imageBitmap = await window.createImageBitmap(props.image);
- const MAX_W = 1000;
- const MAX_H = 1000;
- let w = imageBitmap.width;
- let h = imageBitmap.height;
+ const MAX_W = 1000;
+ const MAX_H = 1000;
+ let w = imageBitmap.width;
+ let h = imageBitmap.height;
- if (w > MAX_W || h > MAX_H) {
- const scale = Math.min(MAX_W / w, MAX_H / h);
- w *= scale;
- h *= scale;
+ if (w > MAX_W || h > MAX_H) {
+ const scale = Math.min(MAX_W / w, MAX_H / h);
+ w = Math.floor(w * scale);
+ h = Math.floor(h * scale);
+ }
+
+ renderer = new ImageEffector({
+ canvas: canvasEl.value,
+ renderWidth: w,
+ renderHeight: h,
+ image: imageBitmap,
+ });
+
+ await renderer.render(layers);
+ } catch (err) {
+ console.error(err);
+ os.alert({
+ type: 'error',
+ text: i18n.ts._imageEffector.failedToLoadImage,
+ });
}
- renderer = new ImageEffector({
- canvas: canvasEl.value,
- renderWidth: w,
- renderHeight: h,
- image: imageBitmap,
- fxs: FXS,
- });
-
- await renderer.setLayers(layers);
-
- renderer.render();
-
closeWaiting();
});
@@ -196,7 +202,7 @@ async function save() {
await nextTick(); // waitingがレンダリングされるまで待つ
renderer.changeResolution(imageBitmap.width, imageBitmap.height); // 本番レンダリングのためオリジナル画質に戻す
- renderer.render(); // toBlobの直前にレンダリングしないと何故か壊れる
+ await renderer.render(layers); // toBlobの直前にレンダリングしないと何故か壊れる
canvasEl.value.toBlob((blob) => {
emit('ok', new File([blob!], `image-${Date.now()}.png`, { type: 'image/png' }));
dialog.value?.close();
@@ -208,11 +214,10 @@ const enabled = ref(true);
watch(enabled, () => {
if (renderer != null) {
if (enabled.value) {
- renderer.setLayers(layers);
+ renderer.render(layers);
} else {
- renderer.setLayers([]);
+ renderer.render([]);
}
- renderer.render();
}
});
@@ -281,6 +286,7 @@ function onImagePointerdown(ev: PointerEvent) {
angle: 0,
opacity: 1,
color: [1, 1, 1],
+ ellipse: false,
},
});
} else if (penMode.value === 'blur') {
@@ -294,6 +300,7 @@ function onImagePointerdown(ev: PointerEvent) {
scaleY: 0.1,
angle: 0,
radius: 3,
+ ellipse: false,
},
});
} else if (penMode.value === 'pixelate') {
@@ -307,6 +314,7 @@ function onImagePointerdown(ev: PointerEvent) {
scaleY: 0.1,
angle: 0,
strength: 0.2,
+ ellipse: false,
},
});
}
@@ -329,7 +337,7 @@ function onImagePointerdown(ev: PointerEvent) {
const scaleY = Math.abs(y - startY);
const layerIndex = layers.findIndex((l) => l.id === id);
- const layer = layerIndex !== -1 ? layers[layerIndex] : null;
+ const layer = layerIndex !== -1 ? (layers[layerIndex] as Extract) : null;
if (layer != null) {
layer.params.offsetX = (x + startX) - 1;
layer.params.offsetY = (y + startY) - 1;
@@ -373,8 +381,17 @@ function onImagePointerdown(ev: PointerEvent) {
.preview {
position: relative;
background-color: var(--MI_THEME-bg);
- background-size: auto auto;
- background-image: repeating-linear-gradient(135deg, transparent, transparent 6px, var(--MI_THEME-panel) 6px, var(--MI_THEME-panel) 12px);
+ background-image: linear-gradient(135deg, transparent 30%, var(--MI_THEME-panel) 30%, var(--MI_THEME-panel) 50%, transparent 50%, transparent 80%, var(--MI_THEME-panel) 80%, var(--MI_THEME-panel) 100%);
+ background-size: 20px 20px;
+}
+
+.animatedBg {
+ animation: bg 1.2s linear infinite;
+}
+
+@keyframes bg {
+ 0% { background-position: 0 0; }
+ 100% { background-position: -20px -20px; }
}
.previewContainer {
diff --git a/packages/frontend/src/components/MkImageFrameEditorDialog.vue b/packages/frontend/src/components/MkImageFrameEditorDialog.vue
new file mode 100644
index 0000000000..2a91c85952
--- /dev/null
+++ b/packages/frontend/src/components/MkImageFrameEditorDialog.vue
@@ -0,0 +1,509 @@
+
+
+
+
+ {{ i18n.ts._imageFrameEditor.title }}
+
+
+
+
+
+
+
{{ i18n.ts.preview }}
+
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts._imageFrameEditor.borderThickness }}
+
+
+
{ const c = getRgb(v); if (c != null) params.bgColor = c; }">
+ {{ i18n.ts._imageFrameEditor.backgroundColor }}
+
+
+
{ const c = getRgb(v); if (c != null) params.fgColor = c; }">
+ {{ i18n.ts._imageFrameEditor.textColor }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.font }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.header }}
+
+
+
+ {{ i18n.ts.show }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.labelThickness }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.labelScale }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.centered }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.captionMain }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.captionSub }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.withQrCode }}
+
+
+
+
+
+ {{ i18n.ts._imageFrameEditor.footer }}
+
+
+
+ {{ i18n.ts.show }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.labelThickness }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.labelScale }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.centered }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.captionMain }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.captionSub }}
+
+
+
+ {{ i18n.ts._imageFrameEditor.withQrCode }}
+
+
+
+
+
+ {{ i18n.ts._imageFrameEditor.availableVariables }}:
+ {filename} - {{ i18n.ts._imageEditing._vars.filename }}
+ {filename_without_ext} - {{ i18n.ts._imageEditing._vars.filename_without_ext }}
+ {caption} - {{ i18n.ts._imageEditing._vars.caption }}
+ {year} - {{ i18n.ts._imageEditing._vars.year }}
+ {month} - {{ i18n.ts._imageEditing._vars.month }}
+ {day} - {{ i18n.ts._imageEditing._vars.day }}
+ {hour} - {{ i18n.ts._imageEditing._vars.hour }}
+ {minute} - {{ i18n.ts._imageEditing._vars.minute }}
+ {second} - {{ i18n.ts._imageEditing._vars.second }}
+ {0month} - {{ i18n.ts._imageEditing._vars.month }} ({{ i18n.ts.zeroPadding }})
+ {0day} - {{ i18n.ts._imageEditing._vars.day }} ({{ i18n.ts.zeroPadding }})
+ {0hour} - {{ i18n.ts._imageEditing._vars.hour }} ({{ i18n.ts.zeroPadding }})
+ {0minute} - {{ i18n.ts._imageEditing._vars.minute }} ({{ i18n.ts.zeroPadding }})
+ {0second} - {{ i18n.ts._imageEditing._vars.second }} ({{ i18n.ts.zeroPadding }})
+ {camera_model} - {{ i18n.ts._imageEditing._vars.camera_model }}
+ {camera_lens_model} - {{ i18n.ts._imageEditing._vars.camera_lens_model }}
+ {camera_mm} - {{ i18n.ts._imageEditing._vars.camera_mm }}
+ {camera_mm_35} - {{ i18n.ts._imageEditing._vars.camera_mm_35 }}
+ {camera_f} - {{ i18n.ts._imageEditing._vars.camera_f }}
+ {camera_s} - {{ i18n.ts._imageEditing._vars.camera_s }}
+ {camera_iso} - {{ i18n.ts._imageEditing._vars.camera_iso }}
+ {gps_lat} - {{ i18n.ts._imageEditing._vars.gps_lat }}
+ {gps_long} - {{ i18n.ts._imageEditing._vars.gps_long }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/components/MkNotesTimeline.vue b/packages/frontend/src/components/MkNotesTimeline.vue
index d94cf3924c..b03bf6d09f 100644
--- a/packages/frontend/src/components/MkNotesTimeline.vue
+++ b/packages/frontend/src/components/MkNotesTimeline.vue
@@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
-
+
@@ -40,26 +40,23 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+
diff --git a/packages/frontend/src/components/MkUserInfo.vue b/packages/frontend/src/components/MkUserInfo.vue
index 69144d3824..f05d9ef8d4 100644
--- a/packages/frontend/src/components/MkUserInfo.vue
+++ b/packages/frontend/src/components/MkUserInfo.vue
@@ -6,7 +6,9 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
+
+
@@ -19,15 +21,15 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.noAccountDescription }}
-
+
{{ i18n.ts.notes }}
{{ number(user.notesCount) }}
-
-
+
+
{{ i18n.ts.following }}
{{ number(user.followingCount) }}
-
-
+
+
{{ i18n.ts.followers }}
{{ number(user.followersCount) }}
-
+
diff --git a/packages/frontend/src/components/MkUserList.vue b/packages/frontend/src/components/MkUserList.vue
index e3469d0fd7..f47d9b56dc 100644
--- a/packages/frontend/src/components/MkUserList.vue
+++ b/packages/frontend/src/components/MkUserList.vue
@@ -15,17 +15,17 @@ SPDX-License-Identifier: AGPL-3.0-only
-
@@ -380,8 +425,17 @@ function removeLayer(layer: WatermarkPreset['layers'][number]) {
.preview {
position: relative;
background-color: var(--MI_THEME-bg);
- background-size: auto auto;
- background-image: repeating-linear-gradient(135deg, transparent, transparent 6px, var(--MI_THEME-panel) 6px, var(--MI_THEME-panel) 12px);
+ background-image: linear-gradient(135deg, transparent 30%, var(--MI_THEME-panel) 30%, var(--MI_THEME-panel) 50%, transparent 50%, transparent 80%, var(--MI_THEME-panel) 80%, var(--MI_THEME-panel) 100%);
+ background-size: 20px 20px;
+}
+
+.animatedBg {
+ animation: bg 1.2s linear infinite;
+}
+
+@keyframes bg {
+ 0% { background-position: 0 0; }
+ 100% { background-position: -20px -20px; }
}
.previewContainer {
diff --git a/packages/frontend/src/components/form/link.vue b/packages/frontend/src/components/form/link.vue
index 63cf1815c0..84382607cf 100644
--- a/packages/frontend/src/components/form/link.vue
+++ b/packages/frontend/src/components/form/link.vue
@@ -47,9 +47,11 @@ defineProps<{
diff --git a/packages/frontend/src/pages/settings/drive.WatermarkItem.vue b/packages/frontend/src/pages/settings/drive.WatermarkItem.vue
index bb91d5e212..0c03a4493a 100644
--- a/packages/frontend/src/pages/settings/drive.WatermarkItem.vue
+++ b/packages/frontend/src/pages/settings/drive.WatermarkItem.vue
@@ -22,8 +22,8 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue
index f58ff4c78c..8d443921a9 100644
--- a/packages/frontend/src/pages/settings/drive.vue
+++ b/packages/frontend/src/pages/settings/drive.vue
@@ -124,6 +124,34 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+
+ {{ i18n.ts.frame }}
+ {{ i18n.ts._imageFrameEditor.tip }}
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.syncBetweenDevices }}
+
+
+
+
+
+
+
{
+ if (res == null) return;
+ if (res.enabled) imageFramePresetsSyncEnabled.value = true;
+ });
+ } else {
+ prefer.disableSync('imageFramePresets');
+ imageFramePresetsSyncEnabled.value = false;
+ }
+}
+
misskeyApi('drive').then(info => {
capacity.value = info.capacity;
usage.value = info.usage;
@@ -266,8 +311,11 @@ function chooseUploadFolder() {
async function addWatermarkPreset() {
const { dispose } = await os.popupAsyncWithDialog(import('@/components/MkWatermarkEditorDialog.vue').then(x => x.default), {
+ presetEditMode: true,
+ preset: null,
+ layers: [],
}, {
- ok: (preset: WatermarkPreset) => {
+ presetOk: (preset) => {
prefer.commit('watermarkPresets', [...prefer.s.watermarkPresets, preset]);
},
closed: () => dispose(),
@@ -299,6 +347,40 @@ function onDeleteWatermarkPreset(id: string) {
}
}
+function onUpdateImageFramePreset(id: string, preset: ImageFramePreset) {
+ const index = prefer.s.imageFramePresets.findIndex(p => p.id === id);
+ if (index !== -1) {
+ prefer.commit('imageFramePresets', [
+ ...prefer.s.imageFramePresets.slice(0, index),
+ preset,
+ ...prefer.s.imageFramePresets.slice(index + 1),
+ ]);
+ }
+}
+
+function onDeleteImageFramePreset(id: string) {
+ const index = prefer.s.imageFramePresets.findIndex(p => p.id === id);
+ if (index !== -1) {
+ prefer.commit('imageFramePresets', [
+ ...prefer.s.imageFramePresets.slice(0, index),
+ ...prefer.s.imageFramePresets.slice(index + 1),
+ ]);
+ }
+}
+
+async function addImageFramePreset() {
+ const { dispose } = await os.popupAsyncWithDialog(import('@/components/MkImageFrameEditorDialog.vue').then(x => x.default), {
+ presetEditMode: true,
+ preset: null,
+ params: null,
+ }, {
+ presetOk: (preset) => {
+ prefer.commit('imageFramePresets', [...prefer.s.imageFramePresets, preset]);
+ },
+ closed: () => dispose(),
+ });
+}
+
function saveProfile() {
misskeyApi('i/update', {
alwaysMarkNsfw: !!alwaysMarkNsfw.value,
diff --git a/packages/frontend/src/pages/settings/emoji-palette.vue b/packages/frontend/src/pages/settings/emoji-palette.vue
index 9c70461847..7f31699ed1 100644
--- a/packages/frontend/src/pages/settings/emoji-palette.vue
+++ b/packages/frontend/src/pages/settings/emoji-palette.vue
@@ -6,6 +6,10 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+ {{ i18n.ts._settings.emojiPaletteBanner }}
+
+
{{ i18n.ts._emojiPalette.palettes }}
@@ -123,6 +127,7 @@ import { computed, ref, watch } from 'vue';
import XPalette from './emoji-palette.palette.vue';
import type { MkSelectItem } from '@/components/MkSelect.vue';
import { genId } from '@/utility/id.js';
+import MkFeatureBanner from '@/components/MkFeatureBanner.vue';
import MkRadios from '@/components/MkRadios.vue';
import MkButton from '@/components/MkButton.vue';
import FormSection from '@/components/form/section.vue';
diff --git a/packages/frontend/src/pages/settings/other.vue b/packages/frontend/src/pages/settings/other.vue
index c4c76884e4..e6ee3bfb1c 100644
--- a/packages/frontend/src/pages/settings/other.vue
+++ b/packages/frontend/src/pages/settings/other.vue
@@ -54,7 +54,9 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.rolesAssignedToMe }}
-
+
+
+
@@ -134,16 +136,14 @@ SPDX-License-Identifier: AGPL-3.0-only
- Force cloud backup
-
-
-
- Read all chat messages
+ {{ i18n.ts.readAllChatMessages }}
+ {{ i18n.ts._preferencesBackup.forceBackup }}
+
{{ i18n.ts.migrateOldSettings }}
{{ i18n.ts.migrateOldSettings_description }}
diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue
index 5e3f148710..972b50f8cd 100644
--- a/packages/frontend/src/pages/settings/preferences.vue
+++ b/packages/frontend/src/pages/settings/preferences.vue
@@ -603,6 +603,18 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+ disableShowingAnimatedImages = !v">
+ {{ i18n.ts._settings.enableAnimatedImages }}
+
+ {{ i18n.ts.turnOffToImprovePerformance }}
+ {{ i18n.ts.disableShowingAnimatedImages_caption }}
+
+
+
+
+
diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue
index f72549df07..89d0991bc0 100644
--- a/packages/frontend/src/pages/timeline.vue
+++ b/packages/frontend/src/pages/timeline.vue
@@ -163,7 +163,7 @@ async function chooseChannel(ev: MouseEvent): Promise {
type: 'link',
icon: 'ti ti-plus',
text: i18n.ts.createNew,
- to: '/channels',
+ to: '/channels/new',
},
];
os.popupMenu(items.filter(i => i != null), ev.currentTarget ?? ev.target);
diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue
index ae7893a7a8..b61c84cbbc 100644
--- a/packages/frontend/src/pages/user/home.vue
+++ b/packages/frontend/src/pages/user/home.vue
@@ -113,7 +113,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ number(user.notesCount) }}
{{ i18n.ts.notes }}
diff --git a/packages/frontend/src/preferences.ts b/packages/frontend/src/preferences.ts
index b8d5e66bf6..7b03823407 100644
--- a/packages/frontend/src/preferences.ts
+++ b/packages/frontend/src/preferences.ts
@@ -3,6 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
+import { BroadcastChannel } from 'broadcast-channel';
import type { StorageProvider } from '@/preferences/manager.js';
import { cloudBackup } from '@/preferences/utility.js';
import { miLocalStorage } from '@/local-storage.js';
@@ -12,6 +13,7 @@ import { $i } from '@/i.js';
import { misskeyApi } from '@/utility/misskey-api.js';
import { TAB_ID } from '@/tab-id.js';
+// クラウド同期用グループ名
const syncGroup = 'default';
const io: StorageProvider = {
@@ -26,7 +28,6 @@ const io: StorageProvider = {
save: (ctx) => {
miLocalStorage.setItem('preferences', JSON.stringify(ctx.profile));
- miLocalStorage.setItem('latestPreferencesUpdate', `${TAB_ID}/${Date.now()}`);
},
cloudGet: async (ctx) => {
@@ -99,33 +100,47 @@ const io: StorageProvider = {
export const prefer = new PreferencesManager(io, $i);
-let latestSyncedAt = Date.now();
+//#region タブ間同期
+let latestPreferencesUpdate: {
+ tabId: string;
+ timestamp: number;
+} | null = null;
-function syncBetweenTabs() {
- const latest = miLocalStorage.getItem('latestPreferencesUpdate');
- if (latest == null) return;
+const preferencesChannel = new BroadcastChannel<{
+ type: 'preferencesUpdate';
+ tabId: string;
+ timestamp: number;
+}>('preferences');
- const latestTab = latest.split('/')[0];
- const latestAt = parseInt(latest.split('/')[1]);
-
- if (latestTab === TAB_ID) return;
- if (latestAt <= latestSyncedAt) return;
-
- prefer.reloadProfile();
-
- latestSyncedAt = Date.now();
-
- if (_DEV_) console.log('prefer:synced');
-}
-
-window.setInterval(syncBetweenTabs, 5000);
-
-window.document.addEventListener('visibilitychange', () => {
- if (window.document.visibilityState === 'visible') {
- syncBetweenTabs();
- }
+prefer.on('committed', () => {
+ latestPreferencesUpdate = {
+ tabId: TAB_ID,
+ timestamp: Date.now(),
+ };
+ preferencesChannel.postMessage({
+ type: 'preferencesUpdate',
+ tabId: TAB_ID,
+ timestamp: latestPreferencesUpdate.timestamp,
+ });
});
+preferencesChannel.addEventListener('message', (msg) => {
+ if (msg.type === 'preferencesUpdate') {
+ if (msg.tabId === TAB_ID) return;
+ if (latestPreferencesUpdate != null) {
+ if (msg.timestamp <= latestPreferencesUpdate.timestamp) return;
+ }
+ prefer.reloadProfile();
+ if (_DEV_) console.log('prefer:received update from other tab');
+ latestPreferencesUpdate = {
+ tabId: msg.tabId,
+ timestamp: msg.timestamp,
+ };
+ }
+});
+//#endregion
+
+//#region 定期クラウドバックアップ
let latestBackupAt = 0;
window.setInterval(() => {
@@ -138,6 +153,7 @@ window.setInterval(() => {
latestBackupAt = Date.now();
});
}, 1000 * 60 * 3);
+//#endregion
if (_DEV_) {
(window as any).prefer = prefer;
diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts
index 915b192605..8d1d33977d 100644
--- a/packages/frontend/src/preferences/def.ts
+++ b/packages/frontend/src/preferences/def.ts
@@ -12,7 +12,8 @@ import type { SoundType } from '@/utility/sound.js';
import type { Plugin } from '@/plugin.js';
import type { DeviceKind } from '@/utility/device-kind.js';
import type { DeckProfile } from '@/deck.js';
-import type { WatermarkPreset } from '@/utility/watermark.js';
+import type { WatermarkPreset } from '@/utility/watermark/WatermarkRenderer.js';
+import type { ImageFramePreset } from '@/utility/image-frame-renderer/ImageFrameRenderer.js';
import { genId } from '@/utility/id.js';
import { DEFAULT_DEVICE_KIND } from '@/utility/device-kind.js';
import { deepEqual } from '@/utility/deep-equal.js';
@@ -233,7 +234,7 @@ export const PREF_DEF = definePreferences({
default: false,
},
disableShowingAnimatedImages: {
- default: prefersReducedMotion,
+ default: false,
},
emojiStyle: {
default: 'twemoji', // twemoji / fluentEmoji / native
@@ -437,6 +438,26 @@ export const PREF_DEF = definePreferences({
accountDependent: true,
default: null as WatermarkPreset['id'] | null,
},
+ imageFramePresets: {
+ accountDependent: true,
+ default: [] as ImageFramePreset[],
+ mergeStrategy: (a, b) => {
+ const mergedItems = [] as typeof a;
+ for (const x of a.concat(b)) {
+ const sameIdItem = mergedItems.find(y => y.id === x.id);
+ if (sameIdItem != null) {
+ if (deepEqual(x, sameIdItem)) { // 完全な重複は無視
+ continue;
+ } else { // IDは同じなのに内容が違う場合はマージ不可とする
+ throw new Error();
+ }
+ } else {
+ mergedItems.push(x);
+ }
+ }
+ return mergedItems;
+ },
+ },
defaultImageCompressionLevel: {
default: 2 as 0 | 1 | 2 | 3,
},
diff --git a/packages/frontend/src/preferences/manager.ts b/packages/frontend/src/preferences/manager.ts
index b6d3d55a5f..5949ee71eb 100644
--- a/packages/frontend/src/preferences/manager.ts
+++ b/packages/frontend/src/preferences/manager.ts
@@ -4,6 +4,7 @@
*/
import { computed, onUnmounted, ref, watch } from 'vue';
+import { EventEmitter } from 'eventemitter3';
import { host, version } from '@@/js/config.js';
import { PREF_DEF } from './def.js';
import type { Ref, WritableComputedRef } from 'vue';
@@ -100,6 +101,14 @@ type PreferencesDefinitionRecord
export type PreferencesDefinition = Record>;
+type PreferencesManagerEvents = {
+ 'committed': (ctx: {
+ key: K;
+ value: ValueOf;
+ oldValue: ValueOf;
+ }) => void;
+};
+
export function definePreferences>(x: {
[K in keyof T]: PreferencesDefinitionRecord
}): {
@@ -180,7 +189,7 @@ function normalizePreferences(preferences: PossiblyNonNormalizedPreferencesProfi
// TODO: PreferencesManagerForGuest のような非ログイン専用のクラスを分離すればthis.currentAccountのnullチェックやaccountがnullであるスコープのレコード挿入などが不要になり綺麗になるかもしれない
// と思ったけど操作アカウントが存在しない場合も考慮する現在の設計の方が汎用的かつ堅牢かもしれない
// NOTE: accountDependentな設定は初期状態であってもアカウントごとのスコープでレコードを作成しておかないと、サーバー同期する際に正しく動作しなくなる
-export class PreferencesManager {
+export class PreferencesManager extends EventEmitter {
private io: StorageProvider;
private currentAccount: { id: string } | null;
public profile: PreferencesProfile;
@@ -201,6 +210,8 @@ export class PreferencesManager {
};
constructor(io: StorageProvider, currentAccount: { id: string } | null) {
+ super();
+
this.io = io;
this.currentAccount = currentAccount;
@@ -246,6 +257,12 @@ export class PreferencesManager {
this.rewriteRawState(key, v);
+ this.emit('committed', {
+ key,
+ value: v,
+ oldValue: this.s[key],
+ });
+
const record = this.getMatchedRecordOf(key);
if (parseScope(record[0]).account == null && isAccountDependentKey(key) && currentAccount != null) {
diff --git a/packages/frontend/src/preferences/utility.ts b/packages/frontend/src/preferences/utility.ts
index 33d379509a..7507a071f4 100644
--- a/packages/frontend/src/preferences/utility.ts
+++ b/packages/frontend/src/preferences/utility.ts
@@ -186,6 +186,7 @@ export async function restoreFromCloudBackup() {
const select = await os.select({
title: i18n.ts._preferencesBackup.selectBackupToRestore,
+ text: 'ℹ️ ' + i18n.ts._preferencesProfile.shareSameProfileBetweenDevicesIsNotRecommended + ' ' + i18n.ts._preferencesProfile.useSyncBetweenDevicesOptionIfYouWantToSyncSetting,
items: backups.map(backup => ({
label: backup.name,
value: backup.name,
diff --git a/packages/frontend/src/stream.ts b/packages/frontend/src/stream.ts
index 25544d9d88..adbde3fee2 100644
--- a/packages/frontend/src/stream.ts
+++ b/packages/frontend/src/stream.ts
@@ -7,8 +7,6 @@ import * as Misskey from 'misskey-js';
import { markRaw } from 'vue';
import { $i } from '@/i.js';
import { wsOrigin } from '@@/js/config.js';
-// TODO: No WebsocketモードでStreamMockが使えそう
-//import { StreamMock } from '@/utility/stream-mock.js';
// heart beat interval in ms
const HEART_BEAT_INTERVAL = 1000 * 60;
diff --git a/packages/frontend/src/tab-id.ts b/packages/frontend/src/tab-id.ts
index 6525763582..db8a5b147f 100644
--- a/packages/frontend/src/tab-id.ts
+++ b/packages/frontend/src/tab-id.ts
@@ -5,7 +5,5 @@
import { genId } from '@/utility/id.js';
-// HMR有効時にバグか知らんけど複数回実行されるのでその対策
-export const TAB_ID = window.sessionStorage.getItem('TAB_ID') ?? genId();
-window.sessionStorage.setItem('TAB_ID', TAB_ID);
+export const TAB_ID = genId();
if (_DEV_) console.log('TAB_ID', TAB_ID);
diff --git a/packages/frontend/src/theme.ts b/packages/frontend/src/theme.ts
index 4da8c02d33..e001bed8f3 100644
--- a/packages/frontend/src/theme.ts
+++ b/packages/frontend/src/theme.ts
@@ -144,19 +144,32 @@ export function applyTheme(theme: Theme, persist = true) {
if (theme.id === currentThemeId && miLocalStorage.getItem('themeCachedVersion') === version) return;
currentThemeId = theme.id;
- if (window.document.startViewTransition != null) {
+ // visibilityStateがhiddenな状態でstartViewTransitionするとブラウザによってはエラーになる
+ // 通常hiddenな時に呼ばれることはないが、iOSのPWAだとアプリ切り替え時に(何故か)hiddenな状態で(何故か)一瞬デバイスのダークモード判定が変わりapplyThemeが呼ばれる場合がある
+ if (window.document.startViewTransition != null && window.document.visibilityState === 'visible') {
window.document.documentElement.classList.add('_themeChanging_');
- window.document.startViewTransition(async () => {
- applyThemeInternal(theme, persist);
- await nextTick();
- }).finished.then(() => {
+ try {
+ window.document.startViewTransition(async () => {
+ applyThemeInternal(theme, persist);
+ await nextTick();
+ }).finished.then(() => {
+ window.document.documentElement.classList.remove('_themeChanging_');
+ globalEvents.emit('themeChanged');
+ });
+ } catch (err) {
+ // 様々な理由により startViewTransition は失敗することがある
+ // ref. https://github.com/misskey-dev/misskey/issues/16562
+
+ // FIXME: viewTransitonエラーはtry~catch貫通してそうな気配がする
+
+ console.error(err);
+
window.document.documentElement.classList.remove('_themeChanging_');
- // 色計算など再度行えるようにクライアント全体に通知
+ applyThemeInternal(theme, persist);
globalEvents.emit('themeChanged');
- });
+ }
} else {
applyThemeInternal(theme, persist);
- // 色計算など再度行えるようにクライアント全体に通知
globalEvents.emit('themeChanged');
}
}
diff --git a/packages/frontend/src/tips.ts b/packages/frontend/src/tips.ts
index 7218f4c19a..8a58e2aa63 100644
--- a/packages/frontend/src/tips.ts
+++ b/packages/frontend/src/tips.ts
@@ -11,6 +11,7 @@ export const TIPS = [
'postFormUploader',
'clips',
'userLists',
+ 'postForm',
'tl.home',
'tl.local',
'tl.social',
diff --git a/packages/frontend/src/types/page-header.ts b/packages/frontend/src/types/page-header.ts
index e9807a2939..7232f17d47 100644
--- a/packages/frontend/src/types/page-header.ts
+++ b/packages/frontend/src/types/page-header.ts
@@ -4,8 +4,8 @@
*/
export type PageHeaderItem = {
- text: string;
- icon: string;
- highlighted?: boolean;
- handler: (ev: MouseEvent) => void;
+ text?: string;
+ icon: string;
+ highlighted?: boolean;
+ handler: (ev: MouseEvent) => void;
};
diff --git a/packages/frontend/src/ui/_common_/navbar-h.vue b/packages/frontend/src/ui/_common_/navbar-h.vue
index b025dd4858..64da4647b6 100644
--- a/packages/frontend/src/ui/_common_/navbar-h.vue
+++ b/packages/frontend/src/ui/_common_/navbar-h.vue
@@ -4,40 +4,40 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
@@ -61,6 +61,10 @@ import { getHTMLElementOrNull } from '@/utility/get-dom-node-or-null.js';
const WINDOW_THRESHOLD = 1400;
+const props = defineProps<{
+ acrylic?: boolean;
+}>();
+
const settingsWindowed = ref(window.innerWidth > WINDOW_THRESHOLD);
const menu = ref(prefer.s.menu);
// const menuDisplay = computed(store.makeGetterSetter('menuDisplay'));
@@ -100,121 +104,140 @@ onMounted(() => {
-
diff --git a/packages/frontend/src/ui/_common_/navbar.vue b/packages/frontend/src/ui/_common_/navbar.vue
index b0e45eafcd..f37e7ae85e 100644
--- a/packages/frontend/src/ui/_common_/navbar.vue
+++ b/packages/frontend/src/ui/_common_/navbar.vue
@@ -11,7 +11,8 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
+
@@ -54,7 +55,8 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
+
{ os.post(); }">
{{ i18n.ts.note }}
diff --git a/packages/frontend/src/ui/deck.vue b/packages/frontend/src/ui/deck.vue
index ff8e91663a..0941c25467 100644
--- a/packages/frontend/src/ui/deck.vue
+++ b/packages/frontend/src/ui/deck.vue
@@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -71,7 +71,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/ui/visitor.vue b/packages/frontend/src/ui/visitor.vue
index 3e07959458..465960b51b 100644
--- a/packages/frontend/src/ui/visitor.vue
+++ b/packages/frontend/src/ui/visitor.vue
@@ -8,16 +8,18 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
-
-
-
+
+
+
{{ instanceName }}
+
{{ i18n.ts.signup }}
+
@@ -38,6 +40,7 @@ import { i18n } from '@/i18n.js';
import MkVisitorDashboard from '@/components/MkVisitorDashboard.vue';
import { mainRouter } from '@/router.js';
import { DI } from '@/di.js';
+import MkButton from '@/components/MkButton.vue';
const isRoot = computed(() => mainRouter.currentRoute.value.name === 'index');
@@ -93,16 +96,26 @@ onMounted(() => {
min-width: 0;
}
-.homeButton {
- position: fixed;
- z-index: 1000;
- bottom: 16px;
- right: 16px;
- width: 60px;
- height: 60px;
+.header {
+ padding: 16px;
+ display: flex;
+ align-items: center;
background: var(--MI_THEME-panel);
- border-radius: 999px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.headerIcon {
+ width: 48px;
+ vertical-align: bottom;
+ border-radius: 8px;
+}
+
+.headerTitle {
+ margin: 0 16px;
+ font-weight: bold;
+}
+
+.headerButton {
+ margin-left: auto;
}
.side {
@@ -112,7 +125,7 @@ onMounted(() => {
background: var(--MI_THEME-accent);
}
-.banner {
+.sideBanner {
position: absolute;
top: 0;
left: 0;
@@ -124,7 +137,7 @@ onMounted(() => {
mask-image: linear-gradient(rgba(0, 0, 0, 1.0), transparent);
}
-.dashboard {
+.sideDashboard {
padding: 32px;
}
diff --git a/packages/frontend/src/utility/drive.ts b/packages/frontend/src/utility/drive.ts
index fb2825e7f7..64079d125a 100644
--- a/packages/frontend/src/utility/drive.ts
+++ b/packages/frontend/src/utility/drive.ts
@@ -124,7 +124,7 @@ export function uploadFile(file: File | Blob, options: {
const driveFile = JSON.parse(ev.target.response);
globalEvents.emit('driveFileCreated', driveFile);
resolve(driveFile);
- }) as (ev: ProgressEvent
) => any;
+ }) as (ev: ProgressEvent) => void;
if (options.onProgress) {
xhr.upload.onprogress = ev => {
diff --git a/packages/frontend/src/utility/image-effector/fxs/blockNoise.glsl b/packages/frontend/src/utility/image-compositor-functions/blockNoise.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/blockNoise.glsl
rename to packages/frontend/src/utility/image-compositor-functions/blockNoise.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/blockNoise.ts b/packages/frontend/src/utility/image-compositor-functions/blockNoise.ts
similarity index 83%
rename from packages/frontend/src/utility/image-effector/fxs/blockNoise.ts
rename to packages/frontend/src/utility/image-compositor-functions/blockNoise.ts
index 355ab4536c..8c83ef51a0 100644
--- a/packages/frontend/src/utility/image-effector/fxs/blockNoise.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/blockNoise.ts
@@ -5,14 +5,42 @@
import seedrandom from 'seedrandom';
import shader from './blockNoise.glsl';
-import { defineImageEffectorFx } from '../ImageEffector.js';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_blockNoise = defineImageEffectorFx({
- id: 'blockNoise',
- name: i18n.ts._imageEffector._fxs.glitch + ': ' + i18n.ts._imageEffector._fxs.blockNoise,
+export const fn = defineImageCompositorFunction<{
+ amount: number;
+ strength: number;
+ width: number;
+ height: number;
+ channelShift: number;
+ seed: number;
+}>({
shader,
- uniforms: ['amount', 'channelShift'] as const,
+ main: ({ gl, program, u, params }) => {
+ gl.uniform1i(u.amount, params.amount);
+ gl.uniform1f(u.channelShift, params.channelShift);
+
+ const margin = 0;
+
+ const rnd = seedrandom(params.seed.toString());
+
+ for (let i = 0; i < params.amount; i++) {
+ const o = gl.getUniformLocation(program, `u_shiftOrigins[${i.toString()}]`);
+ gl.uniform2f(o, (rnd() * (1 + (margin * 2))) - margin, (rnd() * (1 + (margin * 2))) - margin);
+
+ const s = gl.getUniformLocation(program, `u_shiftStrengths[${i.toString()}]`);
+ gl.uniform1f(s, (1 - (rnd() * 2)) * params.strength);
+
+ const sizes = gl.getUniformLocation(program, `u_shiftSizes[${i.toString()}]`);
+ gl.uniform2f(sizes, params.width, params.height);
+ }
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.glitch + ': ' + i18n.ts._imageEffector._fxs.blockNoise,
params: {
amount: {
label: i18n.ts._imageEffector._fxProps.amount,
@@ -64,23 +92,4 @@ export const FX_blockNoise = defineImageEffectorFx({
default: 100,
},
},
- main: ({ gl, program, u, params }) => {
- gl.uniform1i(u.amount, params.amount);
- gl.uniform1f(u.channelShift, params.channelShift);
-
- const margin = 0;
-
- const rnd = seedrandom(params.seed.toString());
-
- for (let i = 0; i < params.amount; i++) {
- const o = gl.getUniformLocation(program, `u_shiftOrigins[${i.toString()}]`);
- gl.uniform2f(o, (rnd() * (1 + (margin * 2))) - margin, (rnd() * (1 + (margin * 2))) - margin);
-
- const s = gl.getUniformLocation(program, `u_shiftStrengths[${i.toString()}]`);
- gl.uniform1f(s, (1 - (rnd() * 2)) * params.strength);
-
- const sizes = gl.getUniformLocation(program, `u_shiftSizes[${i.toString()}]`);
- gl.uniform2f(sizes, params.width, params.height);
- }
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/blur.glsl b/packages/frontend/src/utility/image-compositor-functions/blur.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/blur.glsl
rename to packages/frontend/src/utility/image-compositor-functions/blur.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/blur.ts b/packages/frontend/src/utility/image-compositor-functions/blur.ts
similarity index 81%
rename from packages/frontend/src/utility/image-effector/fxs/blur.ts
rename to packages/frontend/src/utility/image-compositor-functions/blur.ts
index 40f51fa646..1ab8eee6ba 100644
--- a/packages/frontend/src/utility/image-effector/fxs/blur.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/blur.ts
@@ -3,15 +3,33 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './blur.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_blur = defineImageEffectorFx({
- id: 'blur',
- name: i18n.ts._imageEffector._fxs.blur,
+export const fn = defineImageCompositorFunction<{
+ offsetX: number;
+ offsetY: number;
+ scaleX: number;
+ scaleY: number;
+ ellipse: boolean;
+ angle: number;
+ radius: number;
+}>({
shader,
- uniforms: ['offset', 'scale', 'ellipse', 'angle', 'radius', 'samples'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform2f(u.offset, params.offsetX / 2, params.offsetY / 2);
+ gl.uniform2f(u.scale, params.scaleX / 2, params.scaleY / 2);
+ gl.uniform1i(u.ellipse, params.ellipse ? 1 : 0);
+ gl.uniform1f(u.angle, params.angle / 2);
+ gl.uniform1f(u.radius, params.radius);
+ gl.uniform1i(u.samples, 256);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.blur,
params: {
offsetX: {
label: i18n.ts._imageEffector._fxProps.offset + ' X',
@@ -72,12 +90,4 @@ export const FX_blur = defineImageEffectorFx({
step: 0.5,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform2f(u.offset, params.offsetX / 2, params.offsetY / 2);
- gl.uniform2f(u.scale, params.scaleX / 2, params.scaleY / 2);
- gl.uniform1i(u.ellipse, params.ellipse ? 1 : 0);
- gl.uniform1f(u.angle, params.angle / 2);
- gl.uniform1f(u.radius, params.radius);
- gl.uniform1i(u.samples, 256);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/checker.glsl b/packages/frontend/src/utility/image-compositor-functions/checker.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/checker.glsl
rename to packages/frontend/src/utility/image-compositor-functions/checker.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/checker.ts b/packages/frontend/src/utility/image-compositor-functions/checker.ts
similarity index 74%
rename from packages/frontend/src/utility/image-effector/fxs/checker.ts
rename to packages/frontend/src/utility/image-compositor-functions/checker.ts
index 7d1938eeb7..e0476bb126 100644
--- a/packages/frontend/src/utility/image-effector/fxs/checker.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/checker.ts
@@ -3,15 +3,28 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './checker.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_checker = defineImageEffectorFx({
- id: 'checker',
- name: i18n.ts._imageEffector._fxs.checker,
+export const fn = defineImageCompositorFunction<{
+ angle: number;
+ scale: number;
+ color: [number, number, number];
+ opacity: number;
+}>({
shader,
- uniforms: ['angle', 'scale', 'color', 'opacity'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.angle, params.angle / 2);
+ gl.uniform1f(u.scale, params.scale * params.scale);
+ gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
+ gl.uniform1f(u.opacity, params.opacity);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.checker,
params: {
angle: {
label: i18n.ts._imageEffector._fxProps.angle,
@@ -45,10 +58,4 @@ export const FX_checker = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.angle, params.angle / 2);
- gl.uniform1f(u.scale, params.scale * params.scale);
- gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
- gl.uniform1f(u.opacity, params.opacity);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.glsl b/packages/frontend/src/utility/image-compositor-functions/chromaticAberration.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/chromaticAberration.glsl
rename to packages/frontend/src/utility/image-compositor-functions/chromaticAberration.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts b/packages/frontend/src/utility/image-compositor-functions/chromaticAberration.ts
similarity index 66%
rename from packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts
rename to packages/frontend/src/utility/image-compositor-functions/chromaticAberration.ts
index ed4d134251..5e327dd6ac 100644
--- a/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/chromaticAberration.ts
@@ -3,15 +3,24 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './chromaticAberration.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_chromaticAberration = defineImageEffectorFx({
- id: 'chromaticAberration',
- name: i18n.ts._imageEffector._fxs.chromaticAberration,
+export const fn = defineImageCompositorFunction<{
+ normalize: boolean;
+ amount: number;
+}>({
shader,
- uniforms: ['amount', 'start', 'normalize'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.amount, params.amount);
+ gl.uniform1i(u.normalize, params.normalize ? 1 : 0);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.chromaticAberration,
params: {
normalize: {
label: i18n.ts._imageEffector._fxProps.normalize,
@@ -27,8 +36,4 @@ export const FX_chromaticAberration = defineImageEffectorFx({
step: 0.01,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.amount, params.amount);
- gl.uniform1i(u.normalize, params.normalize ? 1 : 0);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorAdjust.glsl b/packages/frontend/src/utility/image-compositor-functions/colorAdjust.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/colorAdjust.glsl
rename to packages/frontend/src/utility/image-compositor-functions/colorAdjust.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts b/packages/frontend/src/utility/image-compositor-functions/colorAdjust.ts
similarity index 79%
rename from packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts
rename to packages/frontend/src/utility/image-compositor-functions/colorAdjust.ts
index 989ca79a2c..33ca05ace7 100644
--- a/packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/colorAdjust.ts
@@ -3,15 +3,30 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './colorAdjust.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_colorAdjust = defineImageEffectorFx({
- id: 'colorAdjust',
- name: i18n.ts._imageEffector._fxs.colorAdjust,
+export const fn = defineImageCompositorFunction<{
+ lightness: number;
+ contrast: number;
+ hue: number;
+ brightness: number;
+ saturation: number;
+}>({
shader,
- uniforms: ['lightness', 'contrast', 'hue', 'brightness', 'saturation'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.brightness, params.brightness);
+ gl.uniform1f(u.contrast, params.contrast);
+ gl.uniform1f(u.hue, params.hue / 2);
+ gl.uniform1f(u.lightness, params.lightness);
+ gl.uniform1f(u.saturation, params.saturation);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.colorAdjust,
params: {
lightness: {
label: i18n.ts._imageEffector._fxProps.lightness,
@@ -59,11 +74,4 @@ export const FX_colorAdjust = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.brightness, params.brightness);
- gl.uniform1f(u.contrast, params.contrast);
- gl.uniform1f(u.hue, params.hue / 2);
- gl.uniform1f(u.lightness, params.lightness);
- gl.uniform1f(u.saturation, params.saturation);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorClamp.glsl b/packages/frontend/src/utility/image-compositor-functions/colorClamp.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/colorClamp.glsl
rename to packages/frontend/src/utility/image-compositor-functions/colorClamp.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorClamp.ts b/packages/frontend/src/utility/image-compositor-functions/colorClamp.ts
similarity index 73%
rename from packages/frontend/src/utility/image-effector/fxs/colorClamp.ts
rename to packages/frontend/src/utility/image-compositor-functions/colorClamp.ts
index f3513011fa..d4e7b786d0 100644
--- a/packages/frontend/src/utility/image-effector/fxs/colorClamp.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/colorClamp.ts
@@ -3,15 +3,28 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './colorClamp.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_colorClamp = defineImageEffectorFx({
- id: 'colorClamp',
- name: i18n.ts._imageEffector._fxs.colorClamp,
+export const fn = defineImageCompositorFunction<{
+ max: number;
+ min: number;
+}>({
shader,
- uniforms: ['rMax', 'rMin', 'gMax', 'gMin', 'bMax', 'bMin'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.rMax, params.max);
+ gl.uniform1f(u.rMin, 1.0 + params.min);
+ gl.uniform1f(u.gMax, params.max);
+ gl.uniform1f(u.gMin, 1.0 + params.min);
+ gl.uniform1f(u.bMax, params.max);
+ gl.uniform1f(u.bMin, 1.0 + params.min);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.colorClamp,
params: {
max: {
label: i18n.ts._imageEffector._fxProps.max,
@@ -32,12 +45,4 @@ export const FX_colorClamp = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.rMax, params.max);
- gl.uniform1f(u.rMin, 1.0 + params.min);
- gl.uniform1f(u.gMax, params.max);
- gl.uniform1f(u.gMin, 1.0 + params.min);
- gl.uniform1f(u.bMax, params.max);
- gl.uniform1f(u.bMin, 1.0 + params.min);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts b/packages/frontend/src/utility/image-compositor-functions/colorClampAdvanced.ts
similarity index 83%
rename from packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts
rename to packages/frontend/src/utility/image-compositor-functions/colorClampAdvanced.ts
index 397e16c1ba..492524ec06 100644
--- a/packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/colorClampAdvanced.ts
@@ -3,15 +3,32 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './colorClamp.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_colorClampAdvanced = defineImageEffectorFx({
- id: 'colorClampAdvanced',
- name: i18n.ts._imageEffector._fxs.colorClampAdvanced,
+export const fn = defineImageCompositorFunction<{
+ rMax: number;
+ rMin: number;
+ gMax: number;
+ gMin: number;
+ bMax: number;
+ bMin: number;
+}>({
shader,
- uniforms: ['rMax', 'rMin', 'gMax', 'gMin', 'bMax', 'bMin'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.rMax, params.rMax);
+ gl.uniform1f(u.rMin, 1.0 + params.rMin);
+ gl.uniform1f(u.gMax, params.gMax);
+ gl.uniform1f(u.gMin, 1.0 + params.gMin);
+ gl.uniform1f(u.bMax, params.bMax);
+ gl.uniform1f(u.bMin, 1.0 + params.bMin);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.colorClampAdvanced,
params: {
rMax: {
label: `${i18n.ts._imageEffector._fxProps.max} (${i18n.ts._imageEffector._fxProps.redComponent})`,
@@ -68,12 +85,4 @@ export const FX_colorClampAdvanced = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.rMax, params.rMax);
- gl.uniform1f(u.rMin, 1.0 + params.rMin);
- gl.uniform1f(u.gMax, params.gMax);
- gl.uniform1f(u.gMin, 1.0 + params.gMin);
- gl.uniform1f(u.bMax, params.bMax);
- gl.uniform1f(u.bMin, 1.0 + params.bMin);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/distort.glsl b/packages/frontend/src/utility/image-compositor-functions/distort.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/distort.glsl
rename to packages/frontend/src/utility/image-compositor-functions/distort.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/distort.ts b/packages/frontend/src/utility/image-compositor-functions/distort.ts
similarity index 76%
rename from packages/frontend/src/utility/image-effector/fxs/distort.ts
rename to packages/frontend/src/utility/image-compositor-functions/distort.ts
index 3ea93a0266..bd0fcdf42f 100644
--- a/packages/frontend/src/utility/image-effector/fxs/distort.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/distort.ts
@@ -3,15 +3,28 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './distort.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_distort = defineImageEffectorFx({
- id: 'distort',
- name: i18n.ts._imageEffector._fxs.distort,
+export const fn = defineImageCompositorFunction<{
+ direction: number;
+ phase: number;
+ frequency: number;
+ strength: number;
+}>({
shader,
- uniforms: ['phase', 'frequency', 'strength', 'direction'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.phase, params.phase);
+ gl.uniform1f(u.frequency, params.frequency);
+ gl.uniform1f(u.strength, params.strength);
+ gl.uniform1i(u.direction, params.direction);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.distort,
params: {
direction: {
label: i18n.ts._imageEffector._fxProps.direction,
@@ -49,10 +62,4 @@ export const FX_distort = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.phase, params.phase);
- gl.uniform1f(u.frequency, params.frequency);
- gl.uniform1f(u.strength, params.strength);
- gl.uniform1i(u.direction, params.direction);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/fill.glsl b/packages/frontend/src/utility/image-compositor-functions/fill.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/fill.glsl
rename to packages/frontend/src/utility/image-compositor-functions/fill.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/fill.ts b/packages/frontend/src/utility/image-compositor-functions/fill.ts
similarity index 81%
rename from packages/frontend/src/utility/image-effector/fxs/fill.ts
rename to packages/frontend/src/utility/image-compositor-functions/fill.ts
index 772cd76cf7..901bdadfe5 100644
--- a/packages/frontend/src/utility/image-effector/fxs/fill.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/fill.ts
@@ -3,15 +3,34 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './fill.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_fill = defineImageEffectorFx({
- id: 'fill',
- name: i18n.ts._imageEffector._fxs.fill,
+export const fn = defineImageCompositorFunction<{
+ offsetX: number;
+ offsetY: number;
+ scaleX: number;
+ scaleY: number;
+ ellipse: boolean;
+ angle: number;
+ color: [number, number, number];
+ opacity: number;
+}>({
shader,
- uniforms: ['offset', 'scale', 'ellipse', 'angle', 'color', 'opacity'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform2f(u.offset, params.offsetX / 2, params.offsetY / 2);
+ gl.uniform2f(u.scale, params.scaleX / 2, params.scaleY / 2);
+ gl.uniform1i(u.ellipse, params.ellipse ? 1 : 0);
+ gl.uniform1f(u.angle, params.angle / 2);
+ gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
+ gl.uniform1f(u.opacity, params.opacity);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.fill,
params: {
offsetX: {
label: i18n.ts._imageEffector._fxProps.offset + ' X',
@@ -78,12 +97,4 @@ export const FX_fill = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform2f(u.offset, params.offsetX / 2, params.offsetY / 2);
- gl.uniform2f(u.scale, params.scaleX / 2, params.scaleY / 2);
- gl.uniform1i(u.ellipse, params.ellipse ? 1 : 0);
- gl.uniform1f(u.angle, params.angle / 2);
- gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
- gl.uniform1f(u.opacity, params.opacity);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/grayscale.glsl b/packages/frontend/src/utility/image-compositor-functions/grayscale.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/grayscale.glsl
rename to packages/frontend/src/utility/image-compositor-functions/grayscale.glsl
diff --git a/packages/frontend/src/utility/image-compositor-functions/grayscale.ts b/packages/frontend/src/utility/image-compositor-functions/grayscale.ts
new file mode 100644
index 0000000000..b6860de0a2
--- /dev/null
+++ b/packages/frontend/src/utility/image-compositor-functions/grayscale.ts
@@ -0,0 +1,21 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import shader from './grayscale.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
+import { i18n } from '@/i18n.js';
+
+export const fn = defineImageCompositorFunction({
+ shader,
+ main: ({ gl, u, params }) => {
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.grayscale,
+ params: {
+ },
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/invert.glsl b/packages/frontend/src/utility/image-compositor-functions/invert.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/invert.glsl
rename to packages/frontend/src/utility/image-compositor-functions/invert.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/invert.ts b/packages/frontend/src/utility/image-compositor-functions/invert.ts
similarity index 68%
rename from packages/frontend/src/utility/image-effector/fxs/invert.ts
rename to packages/frontend/src/utility/image-compositor-functions/invert.ts
index 9417047931..f64e68034e 100644
--- a/packages/frontend/src/utility/image-effector/fxs/invert.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/invert.ts
@@ -3,15 +3,26 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './invert.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_invert = defineImageEffectorFx({
- id: 'invert',
- name: i18n.ts._imageEffector._fxs.invert,
+export const fn = defineImageCompositorFunction<{
+ r: boolean;
+ g: boolean;
+ b: boolean;
+}>({
shader,
- uniforms: ['r', 'g', 'b'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1i(u.r, params.r ? 1 : 0);
+ gl.uniform1i(u.g, params.g ? 1 : 0);
+ gl.uniform1i(u.b, params.b ? 1 : 0);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.invert,
params: {
r: {
label: i18n.ts._imageEffector._fxProps.redComponent,
@@ -29,9 +40,4 @@ export const FX_invert = defineImageEffectorFx({
default: true,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1i(u.r, params.r ? 1 : 0);
- gl.uniform1i(u.g, params.g ? 1 : 0);
- gl.uniform1i(u.b, params.b ? 1 : 0);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/mirror.glsl b/packages/frontend/src/utility/image-compositor-functions/mirror.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/mirror.glsl
rename to packages/frontend/src/utility/image-compositor-functions/mirror.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/mirror.ts b/packages/frontend/src/utility/image-compositor-functions/mirror.ts
similarity index 63%
rename from packages/frontend/src/utility/image-effector/fxs/mirror.ts
rename to packages/frontend/src/utility/image-compositor-functions/mirror.ts
index 6515454ead..47d19c0553 100644
--- a/packages/frontend/src/utility/image-effector/fxs/mirror.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/mirror.ts
@@ -3,15 +3,24 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './mirror.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_mirror = defineImageEffectorFx({
- id: 'mirror',
- name: i18n.ts._imageEffector._fxs.mirror,
+export const fn = defineImageCompositorFunction<{
+ h: number;
+ v: number;
+}>({
shader,
- uniforms: ['h', 'v'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1i(u.h, params.h);
+ gl.uniform1i(u.v, params.v);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.mirror,
params: {
h: {
label: i18n.ts.horizontal,
@@ -19,7 +28,7 @@ export const FX_mirror = defineImageEffectorFx({
enum: [
{ value: -1 as const, icon: 'ti ti-arrow-bar-right' },
{ value: 0 as const, icon: 'ti ti-minus-vertical' },
- { value: 1 as const, icon: 'ti ti-arrow-bar-left' }
+ { value: 1 as const, icon: 'ti ti-arrow-bar-left' },
],
default: -1,
},
@@ -29,13 +38,9 @@ export const FX_mirror = defineImageEffectorFx({
enum: [
{ value: -1 as const, icon: 'ti ti-arrow-bar-down' },
{ value: 0 as const, icon: 'ti ti-minus' },
- { value: 1 as const, icon: 'ti ti-arrow-bar-up' }
+ { value: 1 as const, icon: 'ti ti-arrow-bar-up' },
],
default: 0,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1i(u.h, params.h);
- gl.uniform1i(u.v, params.v);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/pixelate.glsl b/packages/frontend/src/utility/image-compositor-functions/pixelate.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/pixelate.glsl
rename to packages/frontend/src/utility/image-compositor-functions/pixelate.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/pixelate.ts b/packages/frontend/src/utility/image-compositor-functions/pixelate.ts
similarity index 81%
rename from packages/frontend/src/utility/image-effector/fxs/pixelate.ts
rename to packages/frontend/src/utility/image-compositor-functions/pixelate.ts
index e3eef49b23..249d272e7e 100644
--- a/packages/frontend/src/utility/image-effector/fxs/pixelate.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/pixelate.ts
@@ -3,15 +3,33 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './pixelate.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_pixelate = defineImageEffectorFx({
- id: 'pixelate',
- name: i18n.ts._imageEffector._fxs.pixelate,
+export const fn = defineImageCompositorFunction<{
+ offsetX: number;
+ offsetY: number;
+ scaleX: number;
+ scaleY: number;
+ ellipse: boolean;
+ angle: number;
+ strength: number;
+}>({
shader,
- uniforms: ['offset', 'scale', 'ellipse', 'angle', 'strength', 'samples'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform2f(u.offset, params.offsetX / 2, params.offsetY / 2);
+ gl.uniform2f(u.scale, params.scaleX / 2, params.scaleY / 2);
+ gl.uniform1i(u.ellipse, params.ellipse ? 1 : 0);
+ gl.uniform1f(u.angle, params.angle / 2);
+ gl.uniform1f(u.strength, params.strength * params.strength);
+ gl.uniform1i(u.samples, 256);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.pixelate,
params: {
offsetX: {
label: i18n.ts._imageEffector._fxProps.offset + ' X',
@@ -72,12 +90,4 @@ export const FX_pixelate = defineImageEffectorFx({
step: 0.01,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform2f(u.offset, params.offsetX / 2, params.offsetY / 2);
- gl.uniform2f(u.scale, params.scaleX / 2, params.scaleY / 2);
- gl.uniform1i(u.ellipse, params.ellipse ? 1 : 0);
- gl.uniform1f(u.angle, params.angle / 2);
- gl.uniform1f(u.strength, params.strength * params.strength);
- gl.uniform1i(u.samples, 256);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/polkadot.glsl b/packages/frontend/src/utility/image-compositor-functions/polkadot.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/polkadot.glsl
rename to packages/frontend/src/utility/image-compositor-functions/polkadot.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/polkadot.ts b/packages/frontend/src/utility/image-compositor-functions/polkadot.ts
similarity index 81%
rename from packages/frontend/src/utility/image-effector/fxs/polkadot.ts
rename to packages/frontend/src/utility/image-compositor-functions/polkadot.ts
index 521e08cc7b..d94d704be3 100644
--- a/packages/frontend/src/utility/image-effector/fxs/polkadot.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/polkadot.ts
@@ -3,16 +3,36 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './polkadot.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-// Primarily used for watermark
-export const FX_polkadot = defineImageEffectorFx({
- id: 'polkadot',
- name: i18n.ts._imageEffector._fxs.polkadot,
+export const fn = defineImageCompositorFunction<{
+ angle: number;
+ scale: number;
+ majorRadius: number;
+ majorOpacity: number;
+ minorDivisions: number;
+ minorRadius: number;
+ minorOpacity: number;
+ color: [number, number, number];
+}>({
shader,
- uniforms: ['angle', 'scale', 'major_radius', 'major_opacity', 'minor_divisions', 'minor_radius', 'minor_opacity', 'color'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.angle, params.angle / 2);
+ gl.uniform1f(u.scale, params.scale * params.scale);
+ gl.uniform1f(u.major_radius, params.majorRadius);
+ gl.uniform1f(u.major_opacity, params.majorOpacity);
+ gl.uniform1f(u.minor_divisions, params.minorDivisions);
+ gl.uniform1f(u.minor_radius, params.minorRadius);
+ gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
+ gl.uniform1f(u.minor_opacity, params.minorOpacity);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.polkadot,
params: {
angle: {
label: i18n.ts._imageEffector._fxProps.angle,
@@ -79,14 +99,4 @@ export const FX_polkadot = defineImageEffectorFx({
default: [1, 1, 1],
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.angle, params.angle / 2);
- gl.uniform1f(u.scale, params.scale * params.scale);
- gl.uniform1f(u.major_radius, params.majorRadius);
- gl.uniform1f(u.major_opacity, params.majorOpacity);
- gl.uniform1f(u.minor_divisions, params.minorDivisions);
- gl.uniform1f(u.minor_radius, params.minorRadius);
- gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
- gl.uniform1f(u.minor_opacity, params.minorOpacity);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/stripe.glsl b/packages/frontend/src/utility/image-compositor-functions/stripe.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/stripe.glsl
rename to packages/frontend/src/utility/image-compositor-functions/stripe.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/stripe.ts b/packages/frontend/src/utility/image-compositor-functions/stripe.ts
similarity index 77%
rename from packages/frontend/src/utility/image-effector/fxs/stripe.ts
rename to packages/frontend/src/utility/image-compositor-functions/stripe.ts
index 3a6ecf970c..d429a124bc 100644
--- a/packages/frontend/src/utility/image-effector/fxs/stripe.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/stripe.ts
@@ -3,16 +3,31 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './stripe.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-// Primarily used for watermark
-export const FX_stripe = defineImageEffectorFx({
- id: 'stripe',
- name: i18n.ts._imageEffector._fxs.stripe,
+export const fn = defineImageCompositorFunction<{
+ angle: number;
+ frequency: number;
+ threshold: number;
+ color: [number, number, number];
+ opacity: number;
+}>({
shader,
- uniforms: ['angle', 'frequency', 'phase', 'threshold', 'color', 'opacity'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.angle, params.angle / 2);
+ gl.uniform1f(u.frequency, params.frequency * params.frequency);
+ gl.uniform1f(u.phase, 0.0);
+ gl.uniform1f(u.threshold, params.threshold);
+ gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
+ gl.uniform1f(u.opacity, params.opacity);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.stripe,
params: {
angle: {
label: i18n.ts._imageEffector._fxProps.angle,
@@ -55,12 +70,4 @@ export const FX_stripe = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.angle, params.angle / 2);
- gl.uniform1f(u.frequency, params.frequency * params.frequency);
- gl.uniform1f(u.phase, 0.0);
- gl.uniform1f(u.threshold, params.threshold);
- gl.uniform3f(u.color, params.color[0], params.color[1], params.color[2]);
- gl.uniform1f(u.opacity, params.opacity);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/tearing.glsl b/packages/frontend/src/utility/image-compositor-functions/tearing.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/tearing.glsl
rename to packages/frontend/src/utility/image-compositor-functions/tearing.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/tearing.ts b/packages/frontend/src/utility/image-compositor-functions/tearing.ts
similarity index 82%
rename from packages/frontend/src/utility/image-effector/fxs/tearing.ts
rename to packages/frontend/src/utility/image-compositor-functions/tearing.ts
index 453b16bb19..66c61b7ca8 100644
--- a/packages/frontend/src/utility/image-effector/fxs/tearing.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/tearing.ts
@@ -5,14 +5,39 @@
import seedrandom from 'seedrandom';
import shader from './tearing.glsl';
-import { defineImageEffectorFx } from '../ImageEffector.js';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_tearing = defineImageEffectorFx({
- id: 'tearing',
- name: i18n.ts._imageEffector._fxs.glitch + ': ' + i18n.ts._imageEffector._fxs.tearing,
+export const fn = defineImageCompositorFunction<{
+ amount: number;
+ strength: number;
+ size: number;
+ channelShift: number;
+ seed: number;
+}>({
shader,
- uniforms: ['amount', 'channelShift'] as const,
+ main: ({ gl, program, u, params }) => {
+ gl.uniform1i(u.amount, params.amount);
+ gl.uniform1f(u.channelShift, params.channelShift);
+
+ const rnd = seedrandom(params.seed.toString());
+
+ for (let i = 0; i < params.amount; i++) {
+ const o = gl.getUniformLocation(program, `u_shiftOrigins[${i.toString()}]`);
+ gl.uniform1f(o, rnd());
+
+ const s = gl.getUniformLocation(program, `u_shiftStrengths[${i.toString()}]`);
+ gl.uniform1f(s, (1 - (rnd() * 2)) * params.strength);
+
+ const h = gl.getUniformLocation(program, `u_shiftHeights[${i.toString()}]`);
+ gl.uniform1f(h, rnd() * params.size);
+ }
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.glitch + ': ' + i18n.ts._imageEffector._fxs.tearing,
params: {
amount: {
label: i18n.ts._imageEffector._fxProps.amount,
@@ -55,21 +80,4 @@ export const FX_tearing = defineImageEffectorFx({
default: 100,
},
},
- main: ({ gl, program, u, params }) => {
- gl.uniform1i(u.amount, params.amount);
- gl.uniform1f(u.channelShift, params.channelShift);
-
- const rnd = seedrandom(params.seed.toString());
-
- for (let i = 0; i < params.amount; i++) {
- const o = gl.getUniformLocation(program, `u_shiftOrigins[${i.toString()}]`);
- gl.uniform1f(o, rnd());
-
- const s = gl.getUniformLocation(program, `u_shiftStrengths[${i.toString()}]`);
- gl.uniform1f(s, (1 - (rnd() * 2)) * params.strength);
-
- const h = gl.getUniformLocation(program, `u_shiftHeights[${i.toString()}]`);
- gl.uniform1f(h, rnd() * params.size);
- }
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/threshold.glsl b/packages/frontend/src/utility/image-compositor-functions/threshold.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/threshold.glsl
rename to packages/frontend/src/utility/image-compositor-functions/threshold.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/threshold.ts b/packages/frontend/src/utility/image-compositor-functions/threshold.ts
similarity index 71%
rename from packages/frontend/src/utility/image-effector/fxs/threshold.ts
rename to packages/frontend/src/utility/image-compositor-functions/threshold.ts
index d0bb8305ae..83ea788771 100644
--- a/packages/frontend/src/utility/image-effector/fxs/threshold.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/threshold.ts
@@ -3,15 +3,26 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './threshold.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_threshold = defineImageEffectorFx({
- id: 'threshold',
- name: i18n.ts._imageEffector._fxs.threshold,
+export const fn = defineImageCompositorFunction<{
+ r: number;
+ g: number;
+ b: number;
+}>({
shader,
- uniforms: ['r', 'g', 'b'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform1f(u.r, params.r);
+ gl.uniform1f(u.g, params.g);
+ gl.uniform1f(u.b, params.b);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.threshold,
params: {
r: {
label: i18n.ts._imageEffector._fxProps.redComponent,
@@ -38,9 +49,4 @@ export const FX_threshold = defineImageEffectorFx({
step: 0.01,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform1f(u.r, params.r);
- gl.uniform1f(u.g, params.g);
- gl.uniform1f(u.b, params.b);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/fxs/zoomLines.glsl b/packages/frontend/src/utility/image-compositor-functions/zoomLines.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/zoomLines.glsl
rename to packages/frontend/src/utility/image-compositor-functions/zoomLines.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/zoomLines.ts b/packages/frontend/src/utility/image-compositor-functions/zoomLines.ts
similarity index 80%
rename from packages/frontend/src/utility/image-effector/fxs/zoomLines.ts
rename to packages/frontend/src/utility/image-compositor-functions/zoomLines.ts
index 8c0956d24e..f8768e4ec3 100644
--- a/packages/frontend/src/utility/image-effector/fxs/zoomLines.ts
+++ b/packages/frontend/src/utility/image-compositor-functions/zoomLines.ts
@@ -3,15 +3,34 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
import shader from './zoomLines.glsl';
+import type { ImageEffectorUiDefinition } from '../image-effector/ImageEffector.js';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
import { i18n } from '@/i18n.js';
-export const FX_zoomLines = defineImageEffectorFx({
- id: 'zoomLines',
- name: i18n.ts._imageEffector._fxs.zoomLines,
+export const fn = defineImageCompositorFunction<{
+ x: number;
+ y: number;
+ frequency: number;
+ smoothing: boolean;
+ threshold: number;
+ maskSize: number;
+ black: boolean;
+}>({
shader,
- uniforms: ['pos', 'frequency', 'thresholdEnabled', 'threshold', 'maskSize', 'black'] as const,
+ main: ({ gl, u, params }) => {
+ gl.uniform2f(u.pos, params.x / 2, params.y / 2);
+ gl.uniform1f(u.frequency, params.frequency * params.frequency);
+ // thresholdの調整が有効な間はsmoothingが利用できない
+ gl.uniform1i(u.thresholdEnabled, params.smoothing ? 0 : 1);
+ gl.uniform1f(u.threshold, params.threshold);
+ gl.uniform1f(u.maskSize, params.maskSize);
+ gl.uniform1i(u.black, params.black ? 1 : 0);
+ },
+});
+
+export const uiDefinition = {
+ name: i18n.ts._imageEffector._fxs.zoomLines,
params: {
x: {
label: i18n.ts._imageEffector._fxProps.centerX,
@@ -65,13 +84,4 @@ export const FX_zoomLines = defineImageEffectorFx({
default: false,
},
},
- main: ({ gl, u, params }) => {
- gl.uniform2f(u.pos, params.x / 2, params.y / 2);
- gl.uniform1f(u.frequency, params.frequency * params.frequency);
- // thresholdの調整が有効な間はsmoothingが利用できない
- gl.uniform1i(u.thresholdEnabled, params.smoothing ? 0 : 1);
- gl.uniform1f(u.threshold, params.threshold);
- gl.uniform1f(u.maskSize, params.maskSize);
- gl.uniform1i(u.black, params.black ? 1 : 0);
- },
-});
+} satisfies ImageEffectorUiDefinition;
diff --git a/packages/frontend/src/utility/image-effector/ImageEffector.ts b/packages/frontend/src/utility/image-effector/ImageEffector.ts
index 26c74bfae5..10d9d2e6bc 100644
--- a/packages/frontend/src/utility/image-effector/ImageEffector.ts
+++ b/packages/frontend/src/utility/image-effector/ImageEffector.ts
@@ -3,23 +3,17 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import QRCodeStyling from 'qr-code-styling';
-import { url, host } from '@@/js/config.js';
-import { getProxiedImageUrl } from '../media-proxy.js';
-import { initShaderProgram } from '../webgl.js';
-import { ensureSignin } from '@/i.js';
+import { FXS } from './fxs.js';
+import type { ImageCompositorFunction } from '@/lib/ImageCompositor.js';
+import { ImageCompositor } from '@/lib/ImageCompositor.js';
export type ImageEffectorRGB = [r: number, g: number, b: number];
-type ParamTypeToPrimitive = {
- [K in ImageEffectorFxParamDef['type']]: (ImageEffectorFxParamDef & { type: K })['default'];
-};
-
interface CommonParamDef {
type: string;
label?: string;
caption?: string;
- default: any;
+ default: unknown;
}
interface NumberParamDef extends CommonParamDef {
@@ -60,479 +54,77 @@ interface SeedParamDef extends CommonParamDef {
default: number;
};
-interface TextureParamDef extends CommonParamDef {
- type: 'texture';
- default: {
- type: 'text'; text: string | null;
- } | {
- type: 'url'; url: string | null;
- } | {
- type: 'qr'; data: string | null;
- } | null;
-};
-
interface ColorParamDef extends CommonParamDef {
type: 'color';
default: ImageEffectorRGB;
};
-type ImageEffectorFxParamDef = NumberParamDef | NumberEnumParamDef | BooleanParamDef | AlignParamDef | SeedParamDef | TextureParamDef | ColorParamDef;
+type ImageEffectorFxParamDef = NumberParamDef | NumberEnumParamDef | BooleanParamDef | AlignParamDef | SeedParamDef | ColorParamDef;
export type ImageEffectorFxParamDefs = Record;
-export type GetParamType =
- T extends NumberEnumParamDef
- ? T['enum'][number]['value']
- : ParamTypeToPrimitive[T['type']];
-
-export type ParamsRecordTypeToDefRecord = {
- [K in keyof PS]: GetParamType;
-};
-
-export function defineImageEffectorFx(fx: ImageEffectorFx) {
- return fx;
-}
-
-export type ImageEffectorFx = {
- id: ID;
- name: string;
- shader: string;
- uniforms: US;
- params: PS,
- main: (ctx: {
- gl: WebGL2RenderingContext;
- program: WebGLProgram;
- params: ParamsRecordTypeToDefRecord;
- u: Record;
- width: number;
- height: number;
- textures: Record;
- }) => void;
-};
-
export type ImageEffectorLayer = {
- id: string;
- fxId: string;
- params: Record;
+ [K in keyof typeof FXS]: {
+ id: string;
+ fxId: K;
+ params: Parameters<(typeof FXS)[K]['fn']['main']>[0]['params'];
+ };
+}[keyof typeof FXS];
+
+export type ImageEffectorUiDefinition = ImageCompositorFunction> = {
+ name: string;
+ params: Fn extends ImageCompositorFunction ? {
+ [K in keyof P]: ImageEffectorFxParamDef;
+ } : never;
};
-function getValue(params: Record, k: string): ParamTypeToPrimitive[T] {
- return params[k];
-}
+type ImageEffectorImageCompositor = ImageCompositor<{
+ [K in keyof typeof FXS]: typeof FXS[K]['fn'];
+}>;
-export class ImageEffector>> {
- private gl: WebGL2RenderingContext;
+export class ImageEffector {
private canvas: HTMLCanvasElement | null = null;
- private renderWidth: number;
- private renderHeight: number;
- private originalImage: ImageData | ImageBitmap | HTMLImageElement | HTMLCanvasElement;
- private layers: ImageEffectorLayer[] = [];
- private originalImageTexture: WebGLTexture;
- private shaderCache: Map = new Map();
- private perLayerResultTextures: Map = new Map();
- private perLayerResultFrameBuffers: Map = new Map();
- private nopProgram: WebGLProgram;
- private fxs: [...IEX];
- private paramTextures: Map = new Map();
+ private compositor: ImageEffectorImageCompositor;
constructor(options: {
canvas: HTMLCanvasElement;
renderWidth: number;
renderHeight: number;
- image: ImageData | ImageBitmap | HTMLImageElement | HTMLCanvasElement;
- fxs: [...IEX];
+ image: ImageData | ImageBitmap | HTMLImageElement | HTMLCanvasElement | null;
}) {
this.canvas = options.canvas;
- this.renderWidth = options.renderWidth;
- this.renderHeight = options.renderHeight;
- this.originalImage = options.image;
- this.fxs = options.fxs;
- this.canvas.width = this.renderWidth;
- this.canvas.height = this.renderHeight;
-
- const gl = this.canvas.getContext('webgl2', {
- preserveDrawingBuffer: false,
- alpha: true,
- premultipliedAlpha: false,
+ this.compositor = new ImageCompositor({
+ canvas: this.canvas,
+ renderWidth: options.renderWidth,
+ renderHeight: options.renderHeight,
+ image: options.image,
+ functions: Object.fromEntries(Object.entries(FXS).map(([fxId, fx]) => [fxId, fx.fn])),
});
-
- if (gl == null) {
- throw new Error('Failed to initialize WebGL2 context');
- }
-
- this.gl = gl;
-
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
-
- const VERTICES = new Float32Array([-1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1]);
- const vertexBuffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, VERTICES, gl.STATIC_DRAW);
-
- this.originalImageTexture = createTexture(gl);
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, this.originalImageTexture);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.originalImage.width, this.originalImage.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, this.originalImage);
- gl.bindTexture(gl.TEXTURE_2D, null);
-
- this.nopProgram = initShaderProgram(this.gl, `#version 300 es
- in vec2 position;
- out vec2 in_uv;
-
- void main() {
- in_uv = (position + 1.0) / 2.0;
- gl_Position = vec4(position * vec2(1.0, -1.0), 0.0, 1.0);
- }
- `, `#version 300 es
- precision mediump float;
-
- in vec2 in_uv;
- uniform sampler2D u_texture;
- out vec4 out_color;
-
- void main() {
- out_color = texture(u_texture, in_uv);
- }
- `);
-
- // レジスタ番号はシェーダープログラムに属しているわけではなく、独立の存在なので、とりあえず nopProgram を使って設定する(その後は効果が持続する)
- // ref. https://qiita.com/emadurandal/items/5966c8374f03d4de3266
- const positionLocation = gl.getAttribLocation(this.nopProgram, 'position');
- gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
- gl.enableVertexAttribArray(positionLocation);
}
- private renderLayer(layer: ImageEffectorLayer, preTexture: WebGLTexture, invert = false) {
- const gl = this.gl;
-
- const fx = this.fxs.find(fx => fx.id === layer.fxId);
- if (fx == null) return;
-
- const cachedShader = this.shaderCache.get(fx.id);
- const shaderProgram = cachedShader ?? initShaderProgram(this.gl, `#version 300 es
- in vec2 position;
- uniform bool u_invert;
- out vec2 in_uv;
-
- void main() {
- in_uv = (position + 1.0) / 2.0;
- gl_Position = u_invert ? vec4(position * vec2(1.0, -1.0), 0.0, 1.0) : vec4(position, 0.0, 1.0);
- }
- `, fx.shader);
- if (cachedShader == null) {
- this.shaderCache.set(fx.id, shaderProgram);
- }
-
- gl.useProgram(shaderProgram);
-
- const in_resolution = gl.getUniformLocation(shaderProgram, 'in_resolution');
- gl.uniform2fv(in_resolution, [this.renderWidth, this.renderHeight]);
-
- const u_invert = gl.getUniformLocation(shaderProgram, 'u_invert');
- gl.uniform1i(u_invert, invert ? 1 : 0);
-
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, preTexture);
- const in_texture = gl.getUniformLocation(shaderProgram, 'in_texture');
- gl.uniform1i(in_texture, 0);
-
- fx.main({
- gl: gl,
- program: shaderProgram,
- params: Object.fromEntries(
- Object.entries(fx.params as ImageEffectorFxParamDefs).map(([key, param]) => {
- return [key, layer.params[key] ?? param.default];
- }),
- ),
- u: Object.fromEntries(fx.uniforms.map(u => [u, gl.getUniformLocation(shaderProgram, 'u_' + u)!])),
- width: this.renderWidth,
- height: this.renderHeight,
- textures: Object.fromEntries(
- Object.entries(fx.params as ImageEffectorFxParamDefs).map(([k, v]) => {
- if (v.type !== 'texture') return [k, null];
- const param = getValue(layer.params, k);
- if (param == null) return [k, null];
- const texture = this.paramTextures.get(this.getTextureKeyForParam(param)) ?? null;
- return [k, texture];
- })),
- });
-
- gl.drawArrays(gl.TRIANGLES, 0, 6);
- }
-
- public render() {
- const gl = this.gl;
-
- // 入力をそのまま出力
- if (this.layers.length === 0) {
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, this.originalImageTexture);
-
- gl.useProgram(this.nopProgram);
- gl.uniform1i(gl.getUniformLocation(this.nopProgram, 'u_texture')!, 0);
-
- gl.drawArrays(gl.TRIANGLES, 0, 6);
- return;
- }
-
- let preTexture = this.originalImageTexture;
-
- for (const layer of this.layers) {
- const isLast = layer === this.layers.at(-1);
-
- const cachedResultTexture = this.perLayerResultTextures.get(layer.id);
- const resultTexture = cachedResultTexture ?? createTexture(gl);
- if (cachedResultTexture == null) {
- this.perLayerResultTextures.set(layer.id, resultTexture);
- }
- gl.bindTexture(gl.TEXTURE_2D, resultTexture);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.renderWidth, this.renderHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
- gl.bindTexture(gl.TEXTURE_2D, null);
-
- if (isLast) {
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
- } else {
- const cachedResultFrameBuffer = this.perLayerResultFrameBuffers.get(layer.id);
- const resultFrameBuffer = cachedResultFrameBuffer ?? gl.createFramebuffer()!;
- if (cachedResultFrameBuffer == null) {
- this.perLayerResultFrameBuffers.set(layer.id, resultFrameBuffer);
- }
- gl.bindFramebuffer(gl.FRAMEBUFFER, resultFrameBuffer);
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, resultTexture, 0);
- }
-
- this.renderLayer(layer, preTexture, isLast);
-
- preTexture = resultTexture;
- }
- }
-
- public async setLayers(layers: ImageEffectorLayer[]) {
- this.layers = layers;
-
- const unused = new Set(this.paramTextures.keys());
+ public async render(layers: ImageEffectorLayer[]) {
+ const compositorLayers: Parameters['render']>[0] = [];
for (const layer of layers) {
- const fx = this.fxs.find(fx => fx.id === layer.fxId);
- if (fx == null) continue;
-
- for (const k of Object.keys(layer.params)) {
- const paramDef = fx.params[k];
- if (paramDef == null) continue;
- if (paramDef.type !== 'texture') continue;
- const v = getValue(layer.params, k);
- if (v == null) continue;
-
- const textureKey = this.getTextureKeyForParam(v);
- unused.delete(textureKey);
- if (this.paramTextures.has(textureKey)) continue;
-
- if (_DEV_) console.log(`Baking texture of <${textureKey}>...`);
-
- const texture =
- v.type === 'text' ? await createTextureFromText(this.gl, v.text) :
- v.type === 'url' ? await createTextureFromUrl(this.gl, v.url) :
- v.type === 'qr' ? await createTextureFromQr(this.gl, { data: v.data }) :
- null;
- if (texture == null) continue;
-
- this.paramTextures.set(textureKey, texture);
- }
+ compositorLayers.push({
+ id: layer.id,
+ functionId: layer.fxId,
+ params: layer.params,
+ });
}
- for (const k of unused) {
- if (_DEV_) console.log(`Dispose unused texture <${k}>...`);
- this.gl.deleteTexture(this.paramTextures.get(k)!.texture);
- this.paramTextures.delete(k);
- }
-
- this.render();
+ this.compositor.render(compositorLayers as Parameters[0]);
}
public changeResolution(width: number, height: number) {
- this.renderWidth = width;
- this.renderHeight = height;
- if (this.canvas) {
- this.canvas.width = this.renderWidth;
- this.canvas.height = this.renderHeight;
- }
- this.gl.viewport(0, 0, this.renderWidth, this.renderHeight);
- }
-
- private getTextureKeyForParam(v: ParamTypeToPrimitive['texture']) {
- if (v == null) return '';
- return (
- v.type === 'text' ? `text:${v.text}` :
- v.type === 'url' ? `url:${v.url}` :
- v.type === 'qr' ? `qr:${v.data}` :
- ''
- );
+ this.compositor.changeResolution(width, height);
}
/*
* disposeCanvas = true だとloseContextを呼ぶため、コンストラクタで渡されたcanvasも再利用不可になるので注意
*/
public destroy(disposeCanvas = true) {
- this.gl.deleteProgram(this.nopProgram);
-
- for (const shader of this.shaderCache.values()) {
- this.gl.deleteProgram(shader);
- }
- this.shaderCache.clear();
-
- for (const texture of this.perLayerResultTextures.values()) {
- this.gl.deleteTexture(texture);
- }
- this.perLayerResultTextures.clear();
-
- for (const framebuffer of this.perLayerResultFrameBuffers.values()) {
- this.gl.deleteFramebuffer(framebuffer);
- }
- this.perLayerResultFrameBuffers.clear();
-
- for (const texture of this.paramTextures.values()) {
- this.gl.deleteTexture(texture.texture);
- }
- this.paramTextures.clear();
-
- this.gl.deleteTexture(this.originalImageTexture);
-
- if (disposeCanvas) {
- const loseContextExt = this.gl.getExtension('WEBGL_lose_context');
- if (loseContextExt) loseContextExt.loseContext();
- }
+ this.compositor.destroy(disposeCanvas);
}
}
-
-function createTexture(gl: WebGL2RenderingContext): WebGLTexture {
- const texture = gl.createTexture();
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
- gl.bindTexture(gl.TEXTURE_2D, null);
- return texture;
-}
-
-async function createTextureFromUrl(gl: WebGL2RenderingContext, imageUrl: string | null): Promise<{ texture: WebGLTexture, width: number, height: number } | null> {
- if (imageUrl == null || imageUrl.trim() === '') return null;
-
- const image = await new Promise((resolve, reject) => {
- const img = new Image();
- img.onload = () => resolve(img);
- img.onerror = reject;
- img.src = getProxiedImageUrl(imageUrl); // CORS対策
- }).catch(() => null);
-
- if (image == null) return null;
-
- const texture = createTexture(gl);
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, image.width, image.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, image);
- gl.bindTexture(gl.TEXTURE_2D, null);
-
- return {
- texture,
- width: image.width,
- height: image.height,
- };
-}
-
-async function createTextureFromText(gl: WebGL2RenderingContext, text: string | null, resolution = 2048): Promise<{ texture: WebGLTexture, width: number, height: number } | null> {
- if (text == null || text.trim() === '') return null;
-
- const ctx = window.document.createElement('canvas').getContext('2d')!;
- ctx.canvas.width = resolution;
- ctx.canvas.height = resolution / 4;
- const fontSize = resolution / 32;
- const margin = fontSize / 2;
- ctx.shadowColor = '#000000';
- ctx.shadowBlur = fontSize / 4;
-
- //ctx.fillStyle = '#00ff00';
- //ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
-
- ctx.fillStyle = '#ffffff';
- ctx.font = `bold ${fontSize}px sans-serif`;
- ctx.textBaseline = 'middle';
-
- ctx.fillText(text, margin, ctx.canvas.height / 2);
-
- const textMetrics = ctx.measureText(text);
- const cropWidth = (Math.ceil(textMetrics.actualBoundingBoxRight + textMetrics.actualBoundingBoxLeft) + margin + margin);
- const cropHeight = (Math.ceil(textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent) + margin + margin);
- const data = ctx.getImageData(0, (ctx.canvas.height / 2) - (cropHeight / 2), ctx.canvas.width, ctx.canvas.height);
-
- const texture = createTexture(gl);
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, cropWidth, cropHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);
- gl.bindTexture(gl.TEXTURE_2D, null);
-
- const info = {
- texture: texture,
- width: cropWidth,
- height: cropHeight,
- };
-
- ctx.canvas.remove();
-
- return info;
-}
-
-async function createTextureFromQr(gl: WebGL2RenderingContext, options: { data: string | null }, resolution = 512): Promise<{ texture: WebGLTexture, width: number, height: number } | null> {
- const $i = ensureSignin();
-
- const qrCodeInstance = new QRCodeStyling({
- width: resolution,
- height: resolution,
- margin: 42,
- type: 'canvas',
- data: options.data == null || options.data === '' ? `${url}/users/${$i.id}` : options.data,
- image: $i.avatarUrl,
- qrOptions: {
- typeNumber: 0,
- mode: 'Byte',
- errorCorrectionLevel: 'H',
- },
- imageOptions: {
- hideBackgroundDots: true,
- imageSize: 0.3,
- margin: 16,
- crossOrigin: 'anonymous',
- },
- dotsOptions: {
- type: 'dots',
- },
- cornersDotOptions: {
- type: 'dot',
- },
- cornersSquareOptions: {
- type: 'extra-rounded',
- },
- });
-
- const blob = await qrCodeInstance.getRawData('png') as Blob | null;
- if (blob == null) return null;
-
- const image = await window.createImageBitmap(blob);
-
- const texture = createTexture(gl);
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, resolution, resolution, 0, gl.RGBA, gl.UNSIGNED_BYTE, image);
- gl.bindTexture(gl.TEXTURE_2D, null);
-
- return {
- texture,
- width: resolution,
- height: resolution,
- };
-}
diff --git a/packages/frontend/src/utility/image-effector/fxs.ts b/packages/frontend/src/utility/image-effector/fxs.ts
index 2b20cc1f99..1fd0ad6ed7 100644
--- a/packages/frontend/src/utility/image-effector/fxs.ts
+++ b/packages/frontend/src/utility/image-effector/fxs.ts
@@ -3,43 +3,47 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { FX_checker } from './fxs/checker.js';
-import { FX_chromaticAberration } from './fxs/chromaticAberration.js';
-import { FX_colorAdjust } from './fxs/colorAdjust.js';
-import { FX_colorClamp } from './fxs/colorClamp.js';
-import { FX_colorClampAdvanced } from './fxs/colorClampAdvanced.js';
-import { FX_distort } from './fxs/distort.js';
-import { FX_polkadot } from './fxs/polkadot.js';
-import { FX_tearing } from './fxs/tearing.js';
-import { FX_grayscale } from './fxs/grayscale.js';
-import { FX_invert } from './fxs/invert.js';
-import { FX_mirror } from './fxs/mirror.js';
-import { FX_stripe } from './fxs/stripe.js';
-import { FX_threshold } from './fxs/threshold.js';
-import { FX_zoomLines } from './fxs/zoomLines.js';
-import { FX_blockNoise } from './fxs/blockNoise.js';
-import { FX_fill } from './fxs/fill.js';
-import { FX_blur } from './fxs/blur.js';
-import { FX_pixelate } from './fxs/pixelate.js';
-import type { ImageEffectorFx } from './ImageEffector.js';
+import * as checker from '../image-compositor-functions/checker.js';
+import * as chromaticAberration from '../image-compositor-functions/chromaticAberration.js';
+import * as colorAdjust from '../image-compositor-functions/colorAdjust.js';
+import * as colorClamp from '../image-compositor-functions/colorClamp.js';
+import * as colorClampAdvanced from '../image-compositor-functions/colorClampAdvanced.js';
+import * as distort from '../image-compositor-functions/distort.js';
+import * as polkadot from '../image-compositor-functions/polkadot.js';
+import * as tearing from '../image-compositor-functions/tearing.js';
+import * as grayscale from '../image-compositor-functions/grayscale.js';
+import * as invert from '../image-compositor-functions/invert.js';
+import * as mirror from '../image-compositor-functions/mirror.js';
+import * as stripe from '../image-compositor-functions/stripe.js';
+import * as threshold from '../image-compositor-functions/threshold.js';
+import * as zoomLines from '../image-compositor-functions/zoomLines.js';
+import * as blockNoise from '../image-compositor-functions/blockNoise.js';
+import * as fill from '../image-compositor-functions/fill.js';
+import * as blur from '../image-compositor-functions/blur.js';
+import * as pixelate from '../image-compositor-functions/pixelate.js';
+import type { ImageCompositorFunction } from '@/lib/ImageCompositor.js';
+import type { ImageEffectorUiDefinition } from './ImageEffector.js';
-export const FXS = [
- FX_mirror,
- FX_invert,
- FX_grayscale,
- FX_colorAdjust,
- FX_colorClamp,
- FX_colorClampAdvanced,
- FX_distort,
- FX_threshold,
- FX_zoomLines,
- FX_stripe,
- FX_polkadot,
- FX_checker,
- FX_chromaticAberration,
- FX_tearing,
- FX_blockNoise,
- FX_fill,
- FX_blur,
- FX_pixelate,
-] as const satisfies ImageEffectorFx[];
+export const FXS = {
+ checker,
+ chromaticAberration,
+ colorAdjust,
+ colorClamp,
+ colorClampAdvanced,
+ distort,
+ polkadot,
+ tearing,
+ grayscale,
+ invert,
+ mirror,
+ stripe,
+ threshold,
+ zoomLines,
+ blockNoise,
+ fill,
+ blur,
+ pixelate,
+} as const satisfies Record;
+ readonly uiDefinition: ImageEffectorUiDefinition;
+}>;
diff --git a/packages/frontend/src/utility/image-effector/fxs/grayscale.ts b/packages/frontend/src/utility/image-effector/fxs/grayscale.ts
deleted file mode 100644
index 055e8b4618..0000000000
--- a/packages/frontend/src/utility/image-effector/fxs/grayscale.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * SPDX-FileCopyrightText: syuilo and misskey-project
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-import { defineImageEffectorFx } from '../ImageEffector.js';
-import shader from './grayscale.glsl';
-import { i18n } from '@/i18n.js';
-
-export const FX_grayscale = defineImageEffectorFx({
- id: 'grayscale',
- name: i18n.ts._imageEffector._fxs.grayscale,
- shader,
- uniforms: [] as const,
- params: {
- },
- main: ({ gl, params }) => {
- },
-});
diff --git a/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts b/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts
new file mode 100644
index 0000000000..9e97728785
--- /dev/null
+++ b/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts
@@ -0,0 +1,270 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import QRCodeStyling from 'qr-code-styling';
+import { url } from '@@/js/config.js';
+import ExifReader from 'exifreader';
+import { FN_frame } from './frame.js';
+import { ImageCompositor } from '@/lib/ImageCompositor.js';
+import { ensureSignin } from '@/i.js';
+
+const $i = ensureSignin();
+
+type LabelParams = {
+ enabled: boolean;
+ scale: number;
+ padding: number;
+ textBig: string;
+ textSmall: string;
+ centered: boolean;
+ withQrCode: boolean;
+};
+
+export type ImageFrameParams = {
+ borderThickness: number;
+ labelTop: LabelParams;
+ labelBottom: LabelParams;
+ bgColor: [r: number, g: number, b: number];
+ fgColor: [r: number, g: number, b: number];
+ font: 'serif' | 'sans-serif';
+ borderRadius: number; // TODO
+};
+
+export type ImageFramePreset = {
+ id: string;
+ name: string;
+ params: ImageFrameParams;
+};
+
+export class ImageFrameRenderer {
+ private compositor: ImageCompositor<{ frame: typeof FN_frame }>;
+ private image: HTMLImageElement | ImageBitmap;
+ private exif: ExifReader.Tags | null;
+ private caption: string | null = null;
+ private filename: string | null = null;
+ private renderAsPreview = false;
+
+ constructor(options: {
+ canvas: HTMLCanvasElement,
+ image: HTMLImageElement | ImageBitmap,
+ exif: ExifReader.Tags | null,
+ filename: string | null,
+ caption: string | null,
+ renderAsPreview?: boolean,
+ }) {
+ this.image = options.image;
+ this.exif = options.exif;
+ this.caption = options.caption ?? null;
+ this.filename = options.filename ?? null;
+ this.renderAsPreview = options.renderAsPreview ?? false;
+
+ this.compositor = new ImageCompositor({
+ canvas: options.canvas,
+ renderWidth: 1,
+ renderHeight: 1,
+ image: null,
+ functions: { frame: FN_frame },
+ });
+
+ this.compositor.registerTexture('image', this.image);
+ }
+
+ private interpolateTemplateText(text: string) {
+ const DateTimeOriginal = this.exif == null ? '2012:03:04 5:06:07' : this.exif.DateTimeOriginal?.description;
+ const Model = this.exif == null ? 'Example camera' : this.exif.Model?.description;
+ const LensModel = this.exif == null ? 'Example lens 123mm f/1.23' : this.exif.LensModel?.description;
+ const FocalLength = this.exif == null ? '123mm' : this.exif.FocalLength?.description;
+ const FocalLengthIn35mmFilm = this.exif == null ? '123mm' : this.exif.FocalLengthIn35mmFilm?.description;
+ const ExposureTime = this.exif == null ? '1/234' : this.exif.ExposureTime?.description;
+ const FNumber = this.exif == null ? '1.23' : this.exif.FNumber?.description;
+ const ISOSpeedRatings = this.exif == null ? '123' : this.exif.ISOSpeedRatings?.description;
+ const GPSLatitude = this.exif == null ? '123.000000000000123' : this.exif.GPSLatitude?.description;
+ const GPSLongitude = this.exif == null ? '456.000000000000123' : this.exif.GPSLongitude?.description;
+ return text.replaceAll(/\{(\w+)\}/g, (_: string, key: string) => {
+ const meta_date = DateTimeOriginal ?? '????:??:?? ??:??:??';
+ const date = meta_date.split(' ')[0].replaceAll(':', '/');
+ switch (key) {
+ case 'caption': return this.caption ?? '?';
+ case 'filename': return this.filename ?? '?';
+ case 'filename_without_ext': return this.filename?.replace(/\.[^/.]+$/, '') ?? '?';
+ case 'year': return date.split('/')[0];
+ case 'month': return date.split('/')[1].replace(/^0/, '');
+ case 'day': return date.split('/')[2].replace(/^0/, '');
+ case 'hour': return meta_date.split(' ')[1].split(':')[0].replace(/^0/, '');
+ case 'minute': return meta_date.split(' ')[1].split(':')[1].replace(/^0/, '');
+ case 'second': return meta_date.split(' ')[1].split(':')[2].replace(/^0/, '');
+ case '0month': return date.split('/')[1];
+ case '0day': return date.split('/')[2];
+ case '0hour': return meta_date.split(' ')[1].split(':')[0];
+ case '0minute': return meta_date.split(' ')[1].split(':')[1];
+ case '0second': return meta_date.split(' ')[1].split(':')[2];
+ case 'camera_model': return Model ?? '?';
+ case 'camera_lens_model': return LensModel ?? '?';
+ case 'camera_mm': return FocalLength?.replace(' mm', '').replace('mm', '') ?? '?';
+ case 'camera_mm_35': return FocalLengthIn35mmFilm?.replace(' mm', '').replace('mm', '') ?? '?';
+ case 'camera_f': return FNumber?.replace('f/', '') ?? '?';
+ case 'camera_s': return ExposureTime ?? '?';
+ case 'camera_iso': return ISOSpeedRatings ?? '?';
+ case 'gps_lat': return GPSLatitude ?? '?';
+ case 'gps_long': return GPSLongitude ?? '?';
+ default: return '?';
+ }
+ });
+ }
+
+ private async renderLabel(renderWidth: number, renderHeight: number, paddingLeft: number, paddingRight: number, imageAreaH: number, fgColor: [number, number, number], font: string, params: LabelParams) {
+ const scaleBase = imageAreaH * params.scale;
+ const labelCanvasCtx = window.document.createElement('canvas').getContext('2d')!;
+ labelCanvasCtx.canvas.width = renderWidth;
+ labelCanvasCtx.canvas.height = renderHeight;
+ const fontSize = scaleBase / 30;
+ const textsMarginLeft = Math.max(fontSize * 2, paddingLeft);
+ const textsMarginRight = textsMarginLeft;
+ const withQrCode = params.withQrCode;
+ const qrSize = scaleBase * 0.1;
+ const qrMarginRight = Math.max((labelCanvasCtx.canvas.height - qrSize) / 2, paddingRight);
+
+ labelCanvasCtx.fillStyle = `rgb(${Math.floor(fgColor[0] * 255)}, ${Math.floor(fgColor[1] * 255)}, ${Math.floor(fgColor[2] * 255)})`;
+ labelCanvasCtx.font = `bold ${fontSize}px ${font}`;
+ labelCanvasCtx.textBaseline = 'middle';
+
+ const titleY = params.textSmall === '' ? (labelCanvasCtx.canvas.height / 2) : (labelCanvasCtx.canvas.height / 2) - (fontSize * 0.9);
+ if (params.centered) {
+ labelCanvasCtx.textAlign = 'center';
+ labelCanvasCtx.fillText(this.interpolateTemplateText(params.textBig), labelCanvasCtx.canvas.width / 2, titleY, labelCanvasCtx.canvas.width - textsMarginLeft - textsMarginRight);
+ } else {
+ labelCanvasCtx.textAlign = 'left';
+ labelCanvasCtx.fillText(this.interpolateTemplateText(params.textBig), textsMarginLeft, titleY, labelCanvasCtx.canvas.width - textsMarginLeft - (withQrCode ? (qrSize + qrMarginRight + (fontSize * 1)) : textsMarginRight));
+ }
+
+ labelCanvasCtx.fillStyle = `rgba(${Math.floor(fgColor[0] * 255)}, ${Math.floor(fgColor[1] * 255)}, ${Math.floor(fgColor[2] * 255)}, 0.5)`;
+ labelCanvasCtx.font = `${fontSize * 0.85}px ${font}`;
+ labelCanvasCtx.textBaseline = 'middle';
+
+ const textY = params.textBig === '' ? (labelCanvasCtx.canvas.height / 2) : (labelCanvasCtx.canvas.height / 2) + (fontSize * 0.9);
+ if (params.centered) {
+ labelCanvasCtx.textAlign = 'center';
+ labelCanvasCtx.fillText(this.interpolateTemplateText(params.textSmall), labelCanvasCtx.canvas.width / 2, textY, labelCanvasCtx.canvas.width - textsMarginLeft - textsMarginRight);
+ } else {
+ labelCanvasCtx.textAlign = 'left';
+ labelCanvasCtx.fillText(this.interpolateTemplateText(params.textSmall), textsMarginLeft, textY, labelCanvasCtx.canvas.width - textsMarginLeft - (withQrCode ? (qrSize + qrMarginRight + (fontSize * 1)) : textsMarginRight));
+ }
+
+ if (withQrCode) {
+ try {
+ const qrCodeInstance = new QRCodeStyling({
+ width: labelCanvasCtx.canvas.height,
+ height: labelCanvasCtx.canvas.height,
+ margin: 0,
+ type: 'canvas',
+ data: `${url}/users/${$i.id}`,
+ //image: $i.avatarUrl,
+ qrOptions: {
+ typeNumber: 0,
+ mode: 'Byte',
+ errorCorrectionLevel: 'H',
+ },
+ imageOptions: {
+ hideBackgroundDots: true,
+ imageSize: 0.3,
+ margin: 16,
+ crossOrigin: 'anonymous',
+ },
+ dotsOptions: {
+ type: 'dots',
+ roundSize: false,
+ color: `rgb(${Math.floor(fgColor[0] * 255)}, ${Math.floor(fgColor[1] * 255)}, ${Math.floor(fgColor[2] * 255)})`,
+ },
+ backgroundOptions: {
+ color: 'transparent',
+ },
+ cornersDotOptions: {
+ type: 'dot',
+ },
+ cornersSquareOptions: {
+ type: 'extra-rounded',
+ },
+ });
+
+ const blob = await qrCodeInstance.getRawData('png') as Blob | null;
+ if (blob == null) throw new Error('Failed to generate QR code');
+
+ const qrImageBitmap = await window.createImageBitmap(blob);
+
+ labelCanvasCtx.drawImage(
+ qrImageBitmap,
+ labelCanvasCtx.canvas.width - qrSize - qrMarginRight,
+ (labelCanvasCtx.canvas.height - qrSize) / 2,
+ qrSize,
+ qrSize,
+ );
+ qrImageBitmap.close();
+ } catch (err) {
+ // nop
+ }
+ }
+
+ return labelCanvasCtx.getImageData(0, 0, labelCanvasCtx.canvas.width, labelCanvasCtx.canvas.height); ;
+ }
+
+ public async render(params: ImageFrameParams): Promise {
+ let imageAreaW = this.image.width;
+ let imageAreaH = this.image.height;
+
+ if (this.renderAsPreview) {
+ const MAX_W = 1000;
+ const MAX_H = 1000;
+
+ if (imageAreaW > MAX_W || imageAreaH > MAX_H) {
+ const scale = Math.min(MAX_W / imageAreaW, MAX_H / imageAreaH);
+ imageAreaW = Math.floor(imageAreaW * scale);
+ imageAreaH = Math.floor(imageAreaH * scale);
+ }
+ }
+
+ const paddingLeft = Math.floor(imageAreaH * params.borderThickness);
+ const paddingRight = Math.floor(imageAreaH * params.borderThickness);
+ const paddingTop = params.labelTop.enabled ? Math.floor(imageAreaH * params.labelTop.padding) : Math.floor(imageAreaH * params.borderThickness);
+ const paddingBottom = params.labelBottom.enabled ? Math.floor(imageAreaH * params.labelBottom.padding) : Math.floor(imageAreaH * params.borderThickness);
+ const renderWidth = imageAreaW + paddingLeft + paddingRight;
+ const renderHeight = imageAreaH + paddingTop + paddingBottom;
+
+ if (params.labelTop.enabled) {
+ const topLabelImage = await this.renderLabel(renderWidth, paddingTop, paddingLeft, paddingRight, imageAreaH, params.fgColor, params.font, params.labelTop);
+ this.compositor.registerTexture('topLabel', topLabelImage);
+ }
+
+ if (params.labelBottom.enabled) {
+ const bottomLabelImage = await this.renderLabel(renderWidth, paddingBottom, paddingLeft, paddingRight, imageAreaH, params.fgColor, params.font, params.labelBottom);
+ this.compositor.registerTexture('bottomLabel', bottomLabelImage);
+ }
+
+ this.compositor.changeResolution(renderWidth, renderHeight);
+
+ this.compositor.render([{
+ functionId: 'frame',
+ id: 'a',
+ params: {
+ image: 'image',
+ topLabel: 'topLabel',
+ bottomLabel: 'bottomLabel',
+ topLabelEnabled: params.labelTop.enabled,
+ bottomLabelEnabled: params.labelBottom.enabled,
+ paddingLeft: paddingLeft / renderWidth,
+ paddingRight: paddingRight / renderWidth,
+ paddingTop: paddingTop / renderHeight,
+ paddingBottom: paddingBottom / renderHeight,
+ bg: params.bgColor,
+ },
+ }]);
+ }
+
+ /*
+ * disposeCanvas = true だとloseContextを呼ぶため、コンストラクタで渡されたcanvasも再利用不可になるので注意
+ */
+ public destroy(disposeCanvas = true): void {
+ this.compositor.destroy(disposeCanvas);
+ }
+}
diff --git a/packages/frontend/src/utility/image-frame-renderer/frame.glsl b/packages/frontend/src/utility/image-frame-renderer/frame.glsl
new file mode 100644
index 0000000000..aa9dde5ad8
--- /dev/null
+++ b/packages/frontend/src/utility/image-frame-renderer/frame.glsl
@@ -0,0 +1,61 @@
+#version 300 es
+precision mediump float;
+
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+in vec2 in_uv;
+uniform sampler2D in_texture;
+uniform vec2 in_resolution;
+uniform sampler2D u_image;
+uniform sampler2D u_topLabel;
+uniform sampler2D u_bottomLabel;
+uniform bool u_topLabelEnabled;
+uniform bool u_bottomLabelEnabled;
+uniform float u_paddingTop;
+uniform float u_paddingBottom;
+uniform float u_paddingLeft;
+uniform float u_paddingRight;
+uniform vec3 u_bg;
+out vec4 out_color;
+
+float remap(float value, float inputMin, float inputMax, float outputMin, float outputMax) {
+ return outputMin + (outputMax - outputMin) * ((value - inputMin) / (inputMax - inputMin));
+}
+
+vec3 blendAlpha(vec3 bg, vec4 fg) {
+ return fg.a * fg.rgb + (1.0 - fg.a) * bg;
+}
+
+void main() {
+ vec4 bg = vec4(u_bg, 1.0);
+
+ vec4 image_color = texture(u_image, vec2(
+ remap(in_uv.x, u_paddingLeft, 1.0 - u_paddingRight, 0.0, 1.0),
+ remap(in_uv.y, u_paddingTop, 1.0 - u_paddingBottom, 0.0, 1.0)
+ ));
+
+ vec4 topLabel_color = u_topLabelEnabled ? texture(u_topLabel, vec2(
+ in_uv.x,
+ remap(in_uv.y, 0.0, u_paddingTop, 0.0, 1.0)
+ )) : bg;
+
+ vec4 bottomLabel_color = u_bottomLabelEnabled ? texture(u_bottomLabel, vec2(
+ in_uv.x,
+ remap(in_uv.y, 1.0 - u_paddingBottom, 1.0, 0.0, 1.0)
+ )) : bg;
+
+ if (in_uv.y < u_paddingTop) {
+ out_color = vec4(blendAlpha(bg.rgb, topLabel_color), 1.0);
+ } else if (in_uv.y > (1.0 - u_paddingBottom)) {
+ out_color = vec4(blendAlpha(bg.rgb, bottomLabel_color), 1.0);
+ } else {
+ if (in_uv.y > u_paddingTop && in_uv.x > u_paddingLeft && in_uv.x < (1.0 - u_paddingRight)) {
+ out_color = image_color;
+ } else {
+ out_color = bg;
+ }
+ }
+}
diff --git a/packages/frontend/src/utility/image-frame-renderer/frame.ts b/packages/frontend/src/utility/image-frame-renderer/frame.ts
new file mode 100644
index 0000000000..aeca45c1ec
--- /dev/null
+++ b/packages/frontend/src/utility/image-frame-renderer/frame.ts
@@ -0,0 +1,57 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import shader from './frame.glsl';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
+
+export const FN_frame = defineImageCompositorFunction<{
+ image: string | null;
+ topLabel: string | null;
+ bottomLabel: string | null;
+ topLabelEnabled: boolean;
+ bottomLabelEnabled: boolean;
+ paddingTop: number;
+ paddingBottom: number;
+ paddingLeft: number;
+ paddingRight: number;
+ bg: [number, number, number];
+}>({
+ shader,
+ main: ({ gl, u, params, textures }) => {
+ if (params.image == null) return;
+ const image = textures.get(params.image);
+ if (image == null) return;
+
+ gl.activeTexture(gl.TEXTURE1);
+ gl.bindTexture(gl.TEXTURE_2D, image.texture);
+ gl.uniform1i(u.image, 1);
+
+ gl.uniform1i(u.topLabelEnabled, params.topLabelEnabled ? 1 : 0);
+ gl.uniform1i(u.bottomLabelEnabled, params.bottomLabelEnabled ? 1 : 0);
+ gl.uniform1f(u.paddingTop, params.paddingTop);
+ gl.uniform1f(u.paddingBottom, params.paddingBottom);
+ gl.uniform1f(u.paddingLeft, params.paddingLeft);
+ gl.uniform1f(u.paddingRight, params.paddingRight);
+ gl.uniform3f(u.bg, params.bg[0], params.bg[1], params.bg[2]);
+
+ if (params.topLabelEnabled && params.topLabel != null) {
+ const topLabel = textures.get(params.topLabel);
+ if (topLabel) {
+ gl.activeTexture(gl.TEXTURE2);
+ gl.bindTexture(gl.TEXTURE_2D, topLabel.texture);
+ gl.uniform1i(u.topLabel, 2);
+ }
+ }
+
+ if (params.bottomLabelEnabled && params.bottomLabel != null) {
+ const bottomLabel = textures.get(params.bottomLabel);
+ if (bottomLabel) {
+ gl.activeTexture(gl.TEXTURE3);
+ gl.bindTexture(gl.TEXTURE_2D, bottomLabel.texture);
+ gl.uniform1i(u.bottomLabel, 3);
+ }
+ }
+ },
+});
diff --git a/packages/frontend/src/utility/paginator.ts b/packages/frontend/src/utility/paginator.ts
index 7db55db7d6..59ae1e431a 100644
--- a/packages/frontend/src/utility/paginator.ts
+++ b/packages/frontend/src/utility/paginator.ts
@@ -5,7 +5,7 @@
import { ref, shallowRef, triggerRef } from 'vue';
import * as Misskey from 'misskey-js';
-import type { ComputedRef, Ref, ShallowRef } from 'vue';
+import type { ComputedRef, Ref, ShallowRef, UnwrapRef } from 'vue';
import { misskeyApi } from '@/utility/misskey-api.js';
const MAX_ITEMS = 30;
@@ -19,7 +19,12 @@ export type MisskeyEntity = {
_shouldInsertAd_?: boolean;
};
-type FilterByEpRes> = {
+type AbsEndpointType = {
+ req: unknown;
+ res: unknown;
+};
+
+type FilterByEpRes> = {
[K in keyof E]: E[K]['res'] extends Array<{ id: string }> ? K : never
}[keyof E];
export type PaginatorCompatibleEndpointPaths = FilterByEpRes;
@@ -27,6 +32,8 @@ export type PaginatorCompatibleEndpoints = {
[K in PaginatorCompatibleEndpointPaths]: Misskey.Endpoints[K];
};
+export type ExtractorFunction = (item: UnwrapRef
[number]) => T;
+
export interface IPaginator {
/**
* 外部から直接操作しないでください
diff --git a/packages/frontend/src/utility/stream-mock.ts b/packages/frontend/src/utility/stream-mock.ts
deleted file mode 100644
index 9b1b368de4..0000000000
--- a/packages/frontend/src/utility/stream-mock.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * SPDX-FileCopyrightText: syuilo and misskey-project
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-import { EventEmitter } from 'eventemitter3';
-import * as Misskey from 'misskey-js';
-import type { Channels, StreamEvents, IStream, IChannelConnection } from 'misskey-js';
-
-type AnyOf> = T[keyof T];
-type OmitFirst = T extends [any, ...infer R] ? R : never;
-
-/**
- * Websocket無効化時に使うStreamのモック(なにもしない)
- */
-export class StreamMock extends EventEmitter implements IStream {
- public readonly state = 'initializing';
-
- constructor(...args: ConstructorParameters) {
- super();
- // do nothing
- }
-
- public useChannel(channel: C, params?: Channels[C]['params'], name?: string): ChannelConnectionMock {
- return new ChannelConnectionMock(this, channel, name);
- }
-
- public removeSharedConnection(connection: any): void {
- // do nothing
- }
-
- public removeSharedConnectionPool(pool: any): void {
- // do nothing
- }
-
- public disconnectToChannel(): void {
- // do nothing
- }
-
- public send(typeOrPayload: string): void;
- public send(typeOrPayload: string, payload: any): void;
- public send(typeOrPayload: Record | any[]): void;
- public send(typeOrPayload: string | Record | any[], payload?: any): void {
- // do nothing
- }
-
- public ping(): void {
- // do nothing
- }
-
- public heartbeat(): void {
- // do nothing
- }
-
- public close(): void {
- // do nothing
- }
-}
-
-class ChannelConnectionMock = any> extends EventEmitter implements IChannelConnection {
- public id = '';
- public name?: string; // for debug
- public inCount = 0; // for debug
- public outCount = 0; // for debug
- public channel: string;
-
- constructor(stream: IStream, ...args: OmitFirst>>) {
- super();
-
- this.channel = args[0];
- this.name = args[1];
- }
-
- public send(type: T, body: Channel['receives'][T]): void {
- // do nothing
- }
-
- public dispose(): void {
- // do nothing
- }
-}
diff --git a/packages/frontend/src/utility/tour.ts b/packages/frontend/src/utility/tour.ts
new file mode 100644
index 0000000000..c6bfa35a66
--- /dev/null
+++ b/packages/frontend/src/utility/tour.ts
@@ -0,0 +1,49 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { computed, ref, shallowRef, watch, defineAsyncComponent } from 'vue';
+import * as os from '@/os.js';
+
+type TourStep = {
+ title: string;
+ description: string;
+ element: HTMLElement;
+};
+
+export function startTour(steps: TourStep[]) {
+ return new Promise(async (resolve) => {
+ const currentStepIndex = ref(0);
+ const titleRef = ref(steps[0].title);
+ const descriptionRef = ref(steps[0].description);
+ const anchorElementRef = shallowRef(steps[0].element);
+
+ watch(currentStepIndex, (newIndex) => {
+ const step = steps[newIndex];
+ titleRef.value = step.title;
+ descriptionRef.value = step.description;
+ anchorElementRef.value = step.element;
+ });
+
+ const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkSpot.vue')), {
+ title: titleRef,
+ description: descriptionRef,
+ anchorElement: anchorElementRef,
+ hasPrev: computed(() => currentStepIndex.value > 0),
+ hasNext: computed(() => currentStepIndex.value < steps.length - 1),
+ }, {
+ next: () => {
+ if (currentStepIndex.value >= steps.length - 1) {
+ dispose();
+ resolve();
+ return;
+ }
+ currentStepIndex.value++;
+ },
+ prev: () => {
+ currentStepIndex.value--;
+ },
+ });
+ });
+}
diff --git a/packages/frontend/src/utility/watermark.ts b/packages/frontend/src/utility/watermark.ts
deleted file mode 100644
index 1b46721a2b..0000000000
--- a/packages/frontend/src/utility/watermark.ts
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * SPDX-FileCopyrightText: syuilo and misskey-project
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-import type { ImageEffectorFx, ImageEffectorLayer } from '@/utility/image-effector/ImageEffector.js';
-import { FX_watermarkPlacement } from '@/utility/image-effector/fxs/watermarkPlacement.js';
-import { FX_stripe } from '@/utility/image-effector/fxs/stripe.js';
-import { FX_polkadot } from '@/utility/image-effector/fxs/polkadot.js';
-import { FX_checker } from '@/utility/image-effector/fxs/checker.js';
-import { ImageEffector } from '@/utility/image-effector/ImageEffector.js';
-
-const WATERMARK_FXS = [
- FX_watermarkPlacement,
- FX_stripe,
- FX_polkadot,
- FX_checker,
-] as const satisfies ImageEffectorFx[];
-
-type Align = { x: 'left' | 'center' | 'right'; y: 'top' | 'center' | 'bottom'; margin?: number; };
-
-export type WatermarkPreset = {
- id: string;
- name: string;
- layers: ({
- id: string;
- type: 'text';
- text: string;
- repeat: boolean;
- noBoundingBoxExpansion: boolean;
- scale: number;
- angle: number;
- align: Align;
- opacity: number;
- } | {
- id: string;
- type: 'image';
- imageUrl: string | null;
- imageId: string | null;
- cover: boolean;
- repeat: boolean;
- noBoundingBoxExpansion: boolean;
- scale: number;
- angle: number;
- align: Align;
- opacity: number;
- } | {
- id: string;
- type: 'qr';
- data: string;
- scale: number;
- align: Align;
- opacity: number;
- } | {
- id: string;
- type: 'stripe';
- angle: number;
- frequency: number;
- threshold: number;
- color: [r: number, g: number, b: number];
- opacity: number;
- } | {
- id: string;
- type: 'polkadot';
- angle: number;
- scale: number;
- majorRadius: number;
- majorOpacity: number;
- minorDivisions: number;
- minorRadius: number;
- minorOpacity: number;
- color: [r: number, g: number, b: number];
- opacity: number;
- } | {
- id: string;
- type: 'checker';
- angle: number;
- scale: number;
- color: [r: number, g: number, b: number];
- opacity: number;
- })[];
-};
-
-export class WatermarkRenderer {
- private effector: ImageEffector;
- private layers: WatermarkPreset['layers'] = [];
-
- constructor(options: {
- canvas: HTMLCanvasElement,
- renderWidth: number,
- renderHeight: number,
- image: HTMLImageElement | ImageBitmap,
- }) {
- this.effector = new ImageEffector({
- canvas: options.canvas,
- renderWidth: options.renderWidth,
- renderHeight: options.renderHeight,
- image: options.image,
- fxs: WATERMARK_FXS,
- });
- }
-
- private makeImageEffectorLayers(): ImageEffectorLayer[] {
- return this.layers.map(layer => {
- if (layer.type === 'text') {
- return {
- fxId: 'watermarkPlacement',
- id: layer.id,
- params: {
- repeat: layer.repeat,
- noBoundingBoxExpansion: layer.noBoundingBoxExpansion,
- scale: layer.scale,
- align: layer.align,
- angle: layer.angle,
- opacity: layer.opacity,
- cover: false,
- watermark: {
- type: 'text',
- text: layer.text,
- },
- },
- };
- } else if (layer.type === 'image') {
- return {
- fxId: 'watermarkPlacement',
- id: layer.id,
- params: {
- repeat: layer.repeat,
- noBoundingBoxExpansion: layer.noBoundingBoxExpansion,
- scale: layer.scale,
- align: layer.align,
- angle: layer.angle,
- opacity: layer.opacity,
- cover: layer.cover,
- watermark: {
- type: 'url',
- url: layer.imageUrl,
- },
- },
- };
- } else if (layer.type === 'qr') {
- return {
- fxId: 'watermarkPlacement',
- id: layer.id,
- params: {
- repeat: false,
- scale: layer.scale,
- align: layer.align,
- angle: 0,
- opacity: layer.opacity,
- cover: false,
- watermark: {
- type: 'qr',
- data: layer.data,
- },
- },
- };
- } else if (layer.type === 'stripe') {
- return {
- fxId: 'stripe',
- id: layer.id,
- params: {
- angle: layer.angle,
- frequency: layer.frequency,
- threshold: layer.threshold,
- color: layer.color,
- opacity: layer.opacity,
- },
- };
- } else if (layer.type === 'polkadot') {
- return {
- fxId: 'polkadot',
- id: layer.id,
- params: {
- angle: layer.angle,
- scale: layer.scale,
- majorRadius: layer.majorRadius,
- majorOpacity: layer.majorOpacity,
- minorDivisions: layer.minorDivisions,
- minorRadius: layer.minorRadius,
- minorOpacity: layer.minorOpacity,
- color: layer.color,
- },
- };
- } else if (layer.type === 'checker') {
- return {
- fxId: 'checker',
- id: layer.id,
- params: {
- angle: layer.angle,
- scale: layer.scale,
- color: layer.color,
- opacity: layer.opacity,
- },
- };
- } else {
- throw new Error(`Unrecognized layer type: ${(layer as any).type}`);
- }
- });
- }
-
- public async setLayers(layers: WatermarkPreset['layers']) {
- this.layers = layers;
- await this.effector.setLayers(this.makeImageEffectorLayers());
- this.render();
- }
-
- public render(): void {
- this.effector.render();
- }
-
- /*
- * disposeCanvas = true だとloseContextを呼ぶため、コンストラクタで渡されたcanvasも再利用不可になるので注意
- */
- public destroy(disposeCanvas = true): void {
- this.effector.destroy(disposeCanvas);
- }
-}
diff --git a/packages/frontend/src/utility/watermark/WatermarkRenderer.ts b/packages/frontend/src/utility/watermark/WatermarkRenderer.ts
new file mode 100644
index 0000000000..32341a9e10
--- /dev/null
+++ b/packages/frontend/src/utility/watermark/WatermarkRenderer.ts
@@ -0,0 +1,333 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import QRCodeStyling from 'qr-code-styling';
+import { url, host } from '@@/js/config.js';
+import { getProxiedImageUrl } from '../media-proxy.js';
+import { fn as fn_watermark } from './watermark.js';
+import { fn as fn_stripe } from '@/utility/image-compositor-functions/stripe.js';
+import { fn as fn_poladot } from '@/utility/image-compositor-functions/polkadot.js';
+import { fn as fn_checker } from '@/utility/image-compositor-functions/checker.js';
+import { ImageCompositor } from '@/lib/ImageCompositor.js';
+import { ensureSignin } from '@/i.js';
+
+type Align = { x: 'left' | 'center' | 'right'; y: 'top' | 'center' | 'bottom'; margin?: number; };
+
+export type WatermarkLayers = ({
+ id: string;
+ type: 'text';
+ text: string;
+ repeat: boolean;
+ noBoundingBoxExpansion: boolean;
+ scale: number;
+ angle: number;
+ align: Align;
+ opacity: number;
+} | {
+ id: string;
+ type: 'image';
+ imageUrl: string | null;
+ imageId: string | null;
+ cover: boolean;
+ repeat: boolean;
+ noBoundingBoxExpansion: boolean;
+ scale: number;
+ angle: number;
+ align: Align;
+ opacity: number;
+} | {
+ id: string;
+ type: 'qr';
+ data: string;
+ scale: number;
+ align: Align;
+ opacity: number;
+} | {
+ id: string;
+ type: 'stripe';
+ angle: number;
+ frequency: number;
+ threshold: number;
+ color: [r: number, g: number, b: number];
+ opacity: number;
+} | {
+ id: string;
+ type: 'polkadot';
+ angle: number;
+ scale: number;
+ majorRadius: number;
+ majorOpacity: number;
+ minorDivisions: number;
+ minorRadius: number;
+ minorOpacity: number;
+ color: [r: number, g: number, b: number];
+ opacity: number;
+} | {
+ id: string;
+ type: 'checker';
+ angle: number;
+ scale: number;
+ color: [r: number, g: number, b: number];
+ opacity: number;
+})[];
+
+export type WatermarkPreset = {
+ id: string;
+ name: string;
+ layers: WatermarkLayers;
+};
+
+type WatermarkRendererImageCompositor = ImageCompositor<{
+ watermark: typeof fn_watermark;
+ stripe: typeof fn_stripe;
+ polkadot: typeof fn_poladot;
+ checker: typeof fn_checker;
+}>;
+
+export class WatermarkRenderer {
+ private compositor: WatermarkRendererImageCompositor;
+
+ constructor(options: {
+ canvas: HTMLCanvasElement,
+ renderWidth: number,
+ renderHeight: number,
+ image: HTMLImageElement | ImageBitmap,
+ }) {
+ this.compositor = new ImageCompositor({
+ canvas: options.canvas,
+ renderWidth: options.renderWidth,
+ renderHeight: options.renderHeight,
+ image: options.image,
+ functions: {
+ watermark: fn_watermark,
+ stripe: fn_stripe,
+ polkadot: fn_poladot,
+ checker: fn_checker,
+ },
+ });
+ }
+
+ public async render(layers: WatermarkLayers) {
+ const compositorLayers: Parameters[0] = [];
+
+ const unused = new Set(this.compositor.getKeysOfRegisteredTextures());
+
+ for (const layer of layers) {
+ if (layer.type === 'text') {
+ const textureKey = `text:${layer.text}`;
+ unused.delete(textureKey);
+ if (!this.compositor.hasTexture(textureKey)) {
+ if (_DEV_) console.log(`Baking text texture of <${textureKey}>...`);
+ const image = await createTextureFromText(layer.text);
+ if (image != null) this.compositor.registerTexture(textureKey, image);
+ }
+
+ compositorLayers.push({
+ functionId: 'watermark',
+ id: layer.id,
+ params: {
+ repeat: layer.repeat,
+ noBoundingBoxExpansion: layer.noBoundingBoxExpansion,
+ scale: layer.scale,
+ align: layer.align,
+ angle: layer.angle,
+ opacity: layer.opacity,
+ cover: false,
+ watermark: textureKey,
+ },
+ });
+ } else if (layer.type === 'image') {
+ const textureKey = `url:${layer.imageUrl}`;
+ unused.delete(textureKey);
+ if (!this.compositor.hasTexture(textureKey)) {
+ if (_DEV_) console.log(`Baking url image texture of <${textureKey}>...`);
+ const image = await createTextureFromUrl(layer.imageUrl);
+ if (image != null) this.compositor.registerTexture(textureKey, image);
+ }
+
+ compositorLayers.push({
+ functionId: 'watermark',
+ id: layer.id,
+ params: {
+ repeat: layer.repeat,
+ noBoundingBoxExpansion: layer.noBoundingBoxExpansion,
+ scale: layer.scale,
+ align: layer.align,
+ angle: layer.angle,
+ opacity: layer.opacity,
+ cover: layer.cover,
+ watermark: textureKey,
+ },
+ });
+ } else if (layer.type === 'qr') {
+ const textureKey = `qr:${layer.data}`;
+ unused.delete(textureKey);
+ if (!this.compositor.hasTexture(textureKey)) {
+ if (_DEV_) console.log(`Baking qr texture of <${textureKey}>...`);
+ const image = await createTextureFromQr({ data: layer.data });
+ if (image != null) this.compositor.registerTexture(textureKey, image);
+ }
+
+ compositorLayers.push({
+ functionId: 'watermark',
+ id: layer.id,
+ params: {
+ repeat: false,
+ scale: layer.scale,
+ align: layer.align,
+ angle: 0,
+ opacity: layer.opacity,
+ cover: false,
+ watermark: textureKey,
+ },
+ });
+ } else if (layer.type === 'stripe') {
+ compositorLayers.push({
+ functionId: 'stripe',
+ id: layer.id,
+ params: {
+ angle: layer.angle,
+ frequency: layer.frequency,
+ threshold: layer.threshold,
+ color: layer.color,
+ opacity: layer.opacity,
+ },
+ });
+ } else if (layer.type === 'polkadot') {
+ compositorLayers.push({
+ functionId: 'polkadot',
+ id: layer.id,
+ params: {
+ angle: layer.angle,
+ scale: layer.scale,
+ majorRadius: layer.majorRadius,
+ majorOpacity: layer.majorOpacity,
+ minorDivisions: layer.minorDivisions,
+ minorRadius: layer.minorRadius,
+ minorOpacity: layer.minorOpacity,
+ color: layer.color,
+ },
+ });
+ } else if (layer.type === 'checker') {
+ compositorLayers.push({
+ functionId: 'checker',
+ id: layer.id,
+ params: {
+ angle: layer.angle,
+ scale: layer.scale,
+ color: layer.color,
+ opacity: layer.opacity,
+ },
+ });
+ } else {
+ // @ts-expect-error Should be unreachable
+ throw new Error(`Unrecognized layer type: ${layer.type}`);
+ }
+ }
+
+ for (const k of unused) {
+ if (_DEV_) console.log(`Dispose unused texture <${k}>...`);
+ this.compositor.unregisterTexture(k);
+ }
+
+ this.compositor.render(compositorLayers);
+ }
+
+ public changeResolution(width: number, height: number) {
+ this.compositor.changeResolution(width, height);
+ }
+
+ /*
+ * disposeCanvas = true だとloseContextを呼ぶため、コンストラクタで渡されたcanvasも再利用不可になるので注意
+ */
+ public destroy(disposeCanvas = true): void {
+ this.compositor.destroy(disposeCanvas);
+ }
+}
+
+async function createTextureFromUrl(imageUrl: string | null) {
+ if (imageUrl == null || imageUrl.trim() === '') return null;
+
+ const image = await new Promise((resolve, reject) => {
+ const img = new Image();
+ img.onload = () => resolve(img);
+ img.onerror = reject;
+ img.src = getProxiedImageUrl(imageUrl); // CORS対策
+ }).catch(() => null);
+
+ if (image == null) return null;
+
+ return image;
+}
+
+async function createTextureFromText(text: string | null, resolution = 2048) {
+ if (text == null || text.trim() === '') return null;
+
+ const ctx = window.document.createElement('canvas').getContext('2d')!;
+ ctx.canvas.width = resolution;
+ ctx.canvas.height = resolution / 4;
+ const fontSize = resolution / 32;
+ const margin = fontSize / 2;
+ ctx.shadowColor = '#000000';
+ ctx.shadowBlur = fontSize / 4;
+
+ //ctx.fillStyle = '#00ff00';
+ //ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+
+ ctx.fillStyle = '#ffffff';
+ ctx.font = `bold ${fontSize}px sans-serif`;
+ ctx.textBaseline = 'middle';
+
+ ctx.fillText(text, margin, ctx.canvas.height / 2);
+
+ const textMetrics = ctx.measureText(text);
+ const cropWidth = (Math.ceil(textMetrics.actualBoundingBoxRight + textMetrics.actualBoundingBoxLeft) + margin + margin);
+ const cropHeight = (Math.ceil(textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent) + margin + margin);
+ const data = ctx.getImageData(0, (ctx.canvas.height / 2) - (cropHeight / 2), cropWidth, cropHeight);
+
+ ctx.canvas.remove();
+
+ return data;
+}
+
+async function createTextureFromQr(options: { data: string | null }, resolution = 512) {
+ const $i = ensureSignin();
+
+ const qrCodeInstance = new QRCodeStyling({
+ width: resolution,
+ height: resolution,
+ margin: 42,
+ type: 'canvas',
+ data: options.data == null || options.data === '' ? `${url}/users/${$i.id}` : options.data,
+ image: $i.avatarUrl,
+ qrOptions: {
+ typeNumber: 0,
+ mode: 'Byte',
+ errorCorrectionLevel: 'H',
+ },
+ imageOptions: {
+ hideBackgroundDots: true,
+ imageSize: 0.3,
+ margin: 16,
+ crossOrigin: 'anonymous',
+ },
+ dotsOptions: {
+ type: 'dots',
+ },
+ cornersDotOptions: {
+ type: 'dot',
+ },
+ cornersSquareOptions: {
+ type: 'extra-rounded',
+ },
+ });
+
+ const blob = await qrCodeInstance.getRawData('png') as Blob | null;
+ if (blob == null) return null;
+
+ const image = await window.createImageBitmap(blob);
+
+ return image;
+}
diff --git a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.glsl b/packages/frontend/src/utility/watermark/watermark.glsl
similarity index 100%
rename from packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.glsl
rename to packages/frontend/src/utility/watermark/watermark.glsl
diff --git a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts b/packages/frontend/src/utility/watermark/watermark.ts
similarity index 59%
rename from packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts
rename to packages/frontend/src/utility/watermark/watermark.ts
index bb51ed796b..68c80824fc 100644
--- a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts
+++ b/packages/frontend/src/utility/watermark/watermark.ts
@@ -3,57 +3,20 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { defineImageEffectorFx } from '../ImageEffector.js';
-import shader from './watermarkPlacement.glsl';
+import shader from './watermark.glsl';
+import { defineImageCompositorFunction } from '@/lib/ImageCompositor.js';
-export const FX_watermarkPlacement = defineImageEffectorFx({
- id: 'watermarkPlacement',
- name: '(internal)',
+export const fn = defineImageCompositorFunction>({
shader,
- uniforms: ['opacity', 'scale', 'angle', 'cover', 'repeat', 'alignX', 'alignY', 'margin', 'repeatMargin', 'noBBoxExpansion', 'wmResolution', 'wmEnabled', 'watermark'] as const,
- params: {
- cover: {
- type: 'boolean',
- default: false,
- },
- repeat: {
- type: 'boolean',
- default: false,
- },
- scale: {
- type: 'number',
- default: 0.3,
- min: 0.0,
- max: 1.0,
- step: 0.01,
- },
- angle: {
- type: 'number',
- default: 0,
- min: -1.0,
- max: 1.0,
- step: 0.01,
- },
- align: {
- type: 'align',
- default: { x: 'right', y: 'bottom', margin: 0 },
- },
- opacity: {
- type: 'number',
- default: 0.75,
- min: 0.0,
- max: 1.0,
- step: 0.01,
- },
- noBoundingBoxExpansion: {
- type: 'boolean',
- default: false,
- },
- watermark: {
- type: 'texture',
- default: null,
- },
- },
main: ({ gl, u, params, textures }) => {
// 基本パラメータ
gl.uniform1f(u.opacity, params.opacity ?? 1.0);
@@ -70,7 +33,7 @@ export const FX_watermarkPlacement = defineImageEffectorFx({
gl.uniform1i(u.noBBoxExpansion, params.noBoundingBoxExpansion ? 1 : 0);
// ウォーターマークテクスチャ
- const wm = textures.watermark;
+ const wm = params.watermark ? textures.get(params.watermark) : null;
if (wm) {
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, wm.texture);
diff --git a/packages/frontend/src/utility/webgl.ts b/packages/frontend/src/utility/webgl.ts
index ae595b605c..334663b1a1 100644
--- a/packages/frontend/src/utility/webgl.ts
+++ b/packages/frontend/src/utility/webgl.ts
@@ -38,3 +38,14 @@ export function initShaderProgram(gl: WebGL2RenderingContext, vsSource: string,
return shaderProgram;
}
+
+export function createTexture(gl: WebGL2RenderingContext): WebGLTexture {
+ const texture = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.bindTexture(gl.TEXTURE_2D, null);
+ return texture;
+}
diff --git a/packages/frontend/src/widgets/WidgetAiscript.vue b/packages/frontend/src/widgets/WidgetAiscript.vue
index a2d964718e..795c5a2cfa 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.vue
+++ b/packages/frontend/src/widgets/WidgetAiscript.vue
@@ -24,6 +24,7 @@ import { Interpreter, Parser, utils } from '@syuilo/aiscript';
import { useWidgetPropsManager } from './widget.js';
import type { WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import type { FormWithDefault, GetFormResultType } from '@/utility/form.js';
+import type { Value } from '@syuilo/aiscript/interpreter/value.js';
import * as os from '@/os.js';
import MkContainer from '@/components/MkContainer.vue';
import { aiScriptReadline, createAiScriptEnv } from '@/aiscript/api.js';
@@ -83,7 +84,7 @@ const run = async () => {
switch (type) {
case 'end': logs.value.push({
id: genId(),
- text: utils.valToString(params.val, true),
+ text: utils.valToString(params.val as Value, true),
print: false,
}); break;
default: break;
diff --git a/packages/frontend/src/workers/draw-blurhash.ts b/packages/frontend/src/workers/draw-blurhash.ts
index 6e49f6bf66..77b1618e0e 100644
--- a/packages/frontend/src/workers/draw-blurhash.ts
+++ b/packages/frontend/src/workers/draw-blurhash.ts
@@ -3,6 +3,9 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
+///
+///
+
import { render } from 'buraha';
const canvas = new OffscreenCanvas(64, 64);
@@ -18,5 +21,5 @@ onmessage = (event) => {
render(event.data.hash, canvas);
const bitmap = canvas.transferToImageBitmap();
- postMessage({ id: event.data.id, bitmap }, [bitmap]);
+ self.postMessage({ id: event.data.id, bitmap }, [bitmap]);
};
diff --git a/packages/frontend/src/workers/test-webgl2.ts b/packages/frontend/src/workers/test-webgl2.ts
index b203ebe666..64e3dd4ce8 100644
--- a/packages/frontend/src/workers/test-webgl2.ts
+++ b/packages/frontend/src/workers/test-webgl2.ts
@@ -3,12 +3,15 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
+///
+///
+
const canvas = globalThis.OffscreenCanvas && new OffscreenCanvas(1, 1);
// 環境によってはOffscreenCanvasが存在しないため
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
const gl = canvas?.getContext('webgl2');
if (gl) {
- postMessage({ result: true });
+ self.postMessage({ result: true });
} else {
- postMessage({ result: false });
+ self.postMessage({ result: false });
}
diff --git a/packages/frontend/test/aiscript/api.test.ts b/packages/frontend/test/aiscript/api.test.ts
index 34f880286c..292ec7ca77 100644
--- a/packages/frontend/test/aiscript/api.test.ts
+++ b/packages/frontend/test/aiscript/api.test.ts
@@ -8,7 +8,6 @@ import { aiScriptReadline, createAiScriptEnv } from '@/aiscript/api.js';
import { errors, Interpreter, Parser, values } from '@syuilo/aiscript';
import {
afterAll,
- afterEach,
beforeAll,
beforeEach,
describe,
@@ -80,8 +79,9 @@ describe('AiScript common API', () => {
});
describe('readline', () => {
- afterEach(() => {
+ beforeEach(() => {
vi.restoreAllMocks();
+ vi.clearAllMocks();
});
test.sequential('ok', async () => {
@@ -176,8 +176,9 @@ describe('AiScript common API', () => {
});
describe('dialog', () => {
- afterEach(() => {
+ beforeEach(() => {
vi.restoreAllMocks();
+ vi.clearAllMocks();
});
test.sequential('ok', async () => {
@@ -215,8 +216,9 @@ describe('AiScript common API', () => {
});
describe('confirm', () => {
- afterEach(() => {
+ beforeEach(() => {
vi.restoreAllMocks();
+ vi.clearAllMocks();
});
test.sequential('ok', async () => {
@@ -272,8 +274,9 @@ describe('AiScript common API', () => {
});
describe('api', () => {
- afterEach(() => {
+ beforeEach(() => {
vi.restoreAllMocks();
+ vi.clearAllMocks();
});
test.sequential('successful', async () => {
@@ -347,7 +350,7 @@ describe('AiScript common API', () => {
miLocalStorage.removeItem('aiscript:widget:key');
});
- afterEach(() => {
+ beforeEach(() => {
miLocalStorage.removeItem('aiscript:widget:key');
});
diff --git a/packages/frontend/test/i18n.test.ts b/packages/frontend/test/i18n.test.ts
index a51dfc6c4e..14b89f898d 100644
--- a/packages/frontend/test/i18n.test.ts
+++ b/packages/frontend/test/i18n.test.ts
@@ -5,7 +5,7 @@
import { describe, expect, it } from 'vitest';
import { I18n } from '../../frontend-shared/js/i18n.js'; // @@で参照できなかったので
-import type { ParameterizedString } from '../../../locales/index.js';
+import type { ParameterizedString } from 'i18n';
// TODO: このテストはfrontend-sharedに移動する
diff --git a/packages/frontend/test/init.ts b/packages/frontend/test/init.ts
index e38338cf95..28848f6c2f 100644
--- a/packages/frontend/test/init.ts
+++ b/packages/frontend/test/init.ts
@@ -7,13 +7,13 @@ import { vi } from 'vitest';
import createFetchMock from 'vitest-fetch-mock';
import type { Ref } from 'vue';
import { ref } from 'vue';
+// Set i18n
+import locales from 'i18n';
+import { updateI18n } from '@/i18n.js';
const fetchMocker = createFetchMock(vi);
fetchMocker.enableMocks();
-// Set i18n
-import locales from '../../../locales/index.js';
-import { updateI18n } from '@/i18n.js';
updateI18n(locales['en-US']);
// XXX: misskey-js panics if WebSocket is not defined
diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json
index 135bcc04cb..125a393417 100644
--- a/packages/frontend/tsconfig.json
+++ b/packages/frontend/tsconfig.json
@@ -10,7 +10,7 @@
"declaration": false,
"sourceMap": false,
"target": "ES2022",
- "module": "ES2022",
+ "module": "esnext",
"moduleResolution": "Bundler",
"removeComments": false,
"noLib": false,
diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts
index 6f320e99c9..c9c20b23ea 100644
--- a/packages/frontend/vite.config.ts
+++ b/packages/frontend/vite.config.ts
@@ -2,18 +2,18 @@ import path from 'path';
import pluginReplace from '@rollup/plugin-replace';
import pluginVue from '@vitejs/plugin-vue';
import pluginGlsl from 'vite-plugin-glsl';
-import { defineConfig } from 'vite';
import type { UserConfig } from 'vite';
+import { defineConfig } from 'vite';
import * as yaml from 'js-yaml';
import { promises as fsp } from 'fs';
-import locales from '../../locales/index.js';
+import locales from 'i18n';
import meta from '../../package.json';
import packageInfo from './package.json' with { type: 'json' };
import pluginUnwindCssModuleClassName from './lib/rollup-plugin-unwind-css-module-class-name.js';
import pluginJson5 from './vite.json5.js';
-import pluginCreateSearchIndex from './lib/vite-plugin-create-search-index.js';
import type { Options as SearchIndexOptions } from './lib/vite-plugin-create-search-index.js';
+import pluginCreateSearchIndex from './lib/vite-plugin-create-search-index.js';
import pluginWatchLocales from './lib/vite-plugin-watch-locales.js';
import { pluginRemoveUnrefI18n } from '../frontend-builder/rollup-plugin-remove-unref-i18n.js';
diff --git a/packages/i18n/README.md b/packages/i18n/README.md
new file mode 100644
index 0000000000..1013b84ea6
--- /dev/null
+++ b/packages/i18n/README.md
@@ -0,0 +1,5 @@
+# Misskey i18n
+
+Misskey の言語ファイル本体 (ja-JP.yml など) はリポジトリ直下の `/locales` に置かれており、そこから Crowdin 連携やビルド資産が生成されます。
+
+このパッケージは Misskey モノレポ内で、これらの言語ファイルを共通で扱うためのヘルパー群や型情報をまとめる位置づけです。バックエンド / フロントエンド / Service Worker など各パッケージが同じ翻訳データと型定義を利用できるようにすることを目的としており、npm での外部配布は想定していません。
diff --git a/packages/i18n/build.ts b/packages/i18n/build.ts
new file mode 100644
index 0000000000..a6bbf7dc63
--- /dev/null
+++ b/packages/i18n/build.ts
@@ -0,0 +1,163 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import fs from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname, resolve } from 'node:path';
+import { watch as chokidarWatch } from 'chokidar';
+import * as esbuild from 'esbuild';
+import { build } from 'esbuild';
+import { execa } from 'execa';
+import { globSync } from 'glob';
+import { generateLocaleInterface } from './scripts/generateLocaleInterface.js';
+import type { BuildOptions, BuildResult, Plugin, PluginBuild } from 'esbuild';
+
+const _filename = fileURLToPath(import.meta.url);
+const _dirname = dirname(_filename);
+const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
+const _rootPackageDir = resolve(_dirname, '../../');
+const _rootPackage = JSON.parse(fs.readFileSync(resolve(_rootPackageDir, 'package.json'), 'utf-8'));
+const _frontendLocalesDir = resolve(_dirname, '../../built/_frontend_dist_/locales');
+const _localesDir = resolve(_rootPackageDir, 'locales');
+
+const entryPoints = globSync('./src/**/**.{ts,tsx}');
+
+const options: BuildOptions = {
+ entryPoints,
+ minify: process.env.NODE_ENV === 'production',
+ sourceRoot: 'src',
+ outdir: './built',
+ target: 'es2022',
+ platform: 'node',
+ format: 'esm',
+ sourcemap: 'linked',
+};
+
+// コマンドライン引数を取得
+const args = process.argv.slice(2).map(arg => arg.toLowerCase());
+
+// built配下をすべて削除する
+if (!args.includes('--no-clean')) {
+ fs.rmSync('./built', { recursive: true, force: true });
+}
+
+if (args.includes('--watch')) {
+ await watchSrc();
+} else {
+ await buildSrc();
+}
+
+function copyLocales(): void {
+ const srcDir = _localesDir;
+ const destDir = resolve(_dirname, 'built/locales');
+
+ fs.mkdirSync(destDir, { recursive: true });
+
+ const files = fs.readdirSync(srcDir).filter(f => f.endsWith('.yml'));
+ for (const file of files) {
+ fs.copyFileSync(resolve(srcDir, file), resolve(destDir, file));
+ }
+ console.log(`[${_package.name}] locales copied (${files.length} files).`);
+}
+
+/**
+ * フロントエンド用の locale JSON を書き出す
+ * Service Worker が HTTP 経由で取得するために必要
+ */
+async function writeFrontendLocalesJson(): Promise {
+ // 動的 import でビルド済みモジュールから読み込み(循環参照回避)
+ const { writeFrontendLocalesJson: write } = await import('./built/index.js');
+ await write(_frontendLocalesDir, _rootPackage.version);
+ console.log(`[${_package.name}] frontend locales JSON written to ${_frontendLocalesDir}`);
+}
+
+async function buildSrc(): Promise {
+ console.log(`[${_package.name}] start building...`);
+
+ await generateLocaleInterface(_localesDir);
+
+ await build(options)
+ .then(() => {
+ console.log(`[${_package.name}] build succeeded.`);
+ })
+ .catch((err) => {
+ process.stderr.write(err.stderr);
+ process.exit(1);
+ });
+
+ copyLocales();
+ await writeFrontendLocalesJson();
+
+ if (process.env.NODE_ENV === 'production') {
+ console.log(`[${_package.name}] skip building d.ts because NODE_ENV is production.`);
+ } else {
+ await buildDts();
+ }
+
+ console.log(`[${_package.name}] finish building.`);
+}
+
+function buildDts(): Promise {
+ return execa(
+ 'tsc',
+ [
+ '--project', 'tsconfig.json',
+ '--rootDir', 'src',
+ '--outDir', 'built',
+ '--declaration', 'true',
+ '--emitDeclarationOnly', 'true',
+ ],
+ {
+ stdout: process.stdout,
+ stderr: process.stderr,
+ },
+ );
+}
+
+async function watchSrc(): Promise {
+ const localesWatcher = chokidarWatch(_localesDir, {
+ ignoreInitial: true,
+ });
+ localesWatcher.on('all', async (event, path) => {
+ if (!path.endsWith('.yml')) return;
+ console.log(`[${_package.name}] locales changed: ${event} ${path}`);
+ copyLocales();
+ await writeFrontendLocalesJson();
+ await generateLocaleInterface(_localesDir);
+ });
+
+ const plugins: Plugin[] = [{
+ name: 'gen-dts',
+ setup(build: PluginBuild) {
+ build.onStart(() => {
+ console.log(`[${_package.name}] detect changed...`);
+ });
+ build.onEnd(async (result: BuildResult) => {
+ if (result.errors.length > 0) {
+ console.error(`[${_package.name}] watch build failed:`, result);
+ return;
+ }
+ await buildDts();
+ });
+ },
+ }];
+
+ console.log(`[${_package.name}] start watching...`);
+
+ const context = await esbuild.context({ ...options, plugins });
+ await context.watch();
+
+ await new Promise((resolve, reject) => {
+ process.on('SIGHUP', resolve);
+ process.on('SIGINT', resolve);
+ process.on('SIGTERM', resolve);
+ process.on('uncaughtException', reject);
+ process.on('exit', resolve);
+ }).finally(async () => {
+ await context.dispose();
+ await localesWatcher.close();
+ console.log(`[${_package.name}] finish watching.`);
+ });
+}
diff --git a/packages/i18n/eslint.config.js b/packages/i18n/eslint.config.js
new file mode 100644
index 0000000000..f18bc4a4be
--- /dev/null
+++ b/packages/i18n/eslint.config.js
@@ -0,0 +1,35 @@
+import tsParser from '@typescript-eslint/parser';
+import sharedConfig from '../shared/eslint.config.js';
+
+// eslint-disable-next-line import/no-default-export
+export default [
+ ...sharedConfig,
+ {
+ ignores: [
+ '**/node_modules',
+ 'built',
+ 'coverage',
+ 'vitest.config.ts',
+ 'test',
+ 'test-d',
+ 'generator',
+ ],
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx'],
+ languageOptions: {
+ parserOptions: {
+ parser: tsParser,
+ project: ['./tsconfig.eslint.json'],
+ sourceType: 'module',
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+ },
+ {
+ files: ['src/autogen/**/*.ts', 'src/autogen/**/*.tsx'],
+ rules: {
+ '@stylistic/indent': 'off',
+ },
+ },
+];
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
new file mode 100644
index 0000000000..6ba41632e8
--- /dev/null
+++ b/packages/i18n/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "i18n",
+ "type": "module",
+ "private": true,
+ "main": "./built/index.js",
+ "types": "./built/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./built/index.d.ts",
+ "import": "./built/index.js"
+ },
+ "./const": {
+ "types": "./built/const.d.ts",
+ "import": "./built/const.js"
+ }
+ },
+ "scripts": {
+ "generate": "tsx scripts/generateLocaleInterface.ts",
+ "verify": "tsx scripts/verify.ts",
+ "build": "tsx ./build.ts",
+ "watch": "nodemon -w package.json -e json --exec \"tsx ./build.ts --watch\"",
+ "tsd": "tsd",
+ "typecheck": "tsc --noEmit",
+ "lint": "pnpm typecheck && pnpm eslint",
+ "lint:fix": "pnpm eslint --fix"
+ },
+ "files": [
+ "built"
+ ],
+ "devDependencies": {
+ "@types/js-yaml": "4.0.9",
+ "@types/node": "24.10.1",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "chokidar": "4.0.3",
+ "esbuild": "0.27.0",
+ "execa": "9.6.0",
+ "glob": "11.1.0",
+ "nodemon": "3.1.11",
+ "tsx": "4.20.6",
+ "typescript": "5.9.3"
+ },
+ "dependencies": {
+ "js-yaml": "4.1.1"
+ }
+}
diff --git a/packages/i18n/scripts/generateLocaleInterface.ts b/packages/i18n/scripts/generateLocaleInterface.ts
new file mode 100644
index 0000000000..1c0f5c6a79
--- /dev/null
+++ b/packages/i18n/scripts/generateLocaleInterface.ts
@@ -0,0 +1,153 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import * as fs from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname, resolve } from 'node:path';
+import * as yaml from 'js-yaml';
+import ts from 'typescript';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+const parameterRegExp = /\{(\w+)\}/g;
+
+interface LocaleRecord {
+ [key: string]: string | LocaleRecord;
+}
+
+function createMemberType(item: string | LocaleRecord): ts.TypeNode {
+ if (typeof item !== 'string') {
+ return ts.factory.createTypeLiteralNode(createMembers(item));
+ }
+ const parameters = Array.from(
+ item.matchAll(parameterRegExp),
+ ([, parameter]) => parameter,
+ );
+ return parameters.length
+ ? ts.factory.createTypeReferenceNode(
+ ts.factory.createIdentifier('ParameterizedString'),
+ [
+ ts.factory.createUnionTypeNode(
+ parameters.map((parameter) =>
+ ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(parameter)),
+ ),
+ ),
+ ],
+ )
+ : ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
+}
+
+function createMembers(record: LocaleRecord): ts.TypeElement[] {
+ return Object.entries(record).map(([k, v]) => {
+ const node = ts.factory.createPropertySignature(
+ undefined,
+ ts.factory.createStringLiteral(k),
+ undefined,
+ createMemberType(v),
+ );
+ if (typeof v === 'string') {
+ ts.addSyntheticLeadingComment(
+ node,
+ ts.SyntaxKind.MultiLineCommentTrivia,
+ `*
+ * ${v.replace(/\n/g, '\n * ')}
+ `,
+ true,
+ );
+ }
+ return node;
+ });
+}
+
+export async function generateLocaleInterface(localesDir: string): Promise {
+ const locale = yaml.load(fs.readFileSync(`${localesDir}/ja-JP.yml`, 'utf-8').toString()) as LocaleRecord;
+ const members = createMembers(locale);
+
+ const elements: ts.Statement[] = [
+ ts.factory.createImportDeclaration(
+ undefined,
+ ts.factory.createImportClause(
+ false,
+ undefined,
+ ts.factory.createNamedImports([
+ ts.factory.createImportSpecifier(
+ true,
+ undefined,
+ ts.factory.createIdentifier('ILocale'),
+ ),
+ ts.factory.createImportSpecifier(
+ true,
+ undefined,
+ ts.factory.createIdentifier('ParameterizedString'),
+ ),
+ ]),
+ ),
+ ts.factory.createStringLiteral('../types.js'),
+ undefined,
+ ),
+ ts.factory.createInterfaceDeclaration(
+ [ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
+ ts.factory.createIdentifier('Locale'),
+ undefined,
+ [
+ ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [
+ ts.factory.createExpressionWithTypeArguments(
+ ts.factory.createIdentifier('ILocale'),
+ undefined,
+ ),
+ ]),
+ ],
+ members,
+ ),
+ ];
+
+ ts.addSyntheticLeadingComment(
+ elements[0],
+ ts.SyntaxKind.MultiLineCommentTrivia,
+ ' eslint-disable ',
+ true,
+ );
+ ts.addSyntheticLeadingComment(
+ elements[0],
+ ts.SyntaxKind.SingleLineCommentTrivia,
+ ' This file is generated by scripts/generateLocaleInterface.ts',
+ true,
+ );
+ ts.addSyntheticLeadingComment(
+ elements[0],
+ ts.SyntaxKind.SingleLineCommentTrivia,
+ ' Do not edit this file directly.',
+ true,
+ );
+
+ const printed = ts
+ .createPrinter({
+ newLine: ts.NewLineKind.LineFeed,
+ })
+ .printList(
+ ts.ListFormat.MultiLine,
+ ts.factory.createNodeArray(elements),
+ ts.createSourceFile(
+ 'locale.ts',
+ '',
+ ts.ScriptTarget.ESNext,
+ true,
+ ts.ScriptKind.TS,
+ ),
+ );
+
+ const autogenDir = `${__dirname}/../src/autogen`;
+ fs.mkdirSync(autogenDir, { recursive: true });
+
+ // 一瞬ファイルが存在しなくなって途切れる→不安定になるらしいので、リネームで対処
+ fs.writeFileSync(`${autogenDir}/_locale.ts`, printed, 'utf-8');
+ fs.renameSync(`${autogenDir}/_locale.ts`, `${autogenDir}/locale.ts`);
+}
+
+// スクリプトとして直接実行された場合
+const isMain = import.meta.url === `file://${process.argv[1]}`;
+if (isMain) {
+ await generateLocaleInterface(resolve(__dirname, '../../../locales'));
+}
diff --git a/packages/i18n/scripts/verify.ts b/packages/i18n/scripts/verify.ts
new file mode 100644
index 0000000000..877966e49f
--- /dev/null
+++ b/packages/i18n/scripts/verify.ts
@@ -0,0 +1,70 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+let valid = true;
+
+interface LocaleRecord {
+ [key: string]: string | LocaleRecord;
+}
+
+interface ErrorData {
+ expected?: string;
+ actual?: string;
+ parameter?: string;
+}
+
+function writeError(type: string, lang: string, tree: string, data: ErrorData): void {
+ process.stderr.write(JSON.stringify({ type, lang, tree, data }));
+ process.stderr.write('\n');
+ valid = false;
+}
+
+function verify(expected: LocaleRecord, actual: LocaleRecord, lang: string, trace?: string): void {
+ for (const key in expected) {
+ if (!Object.prototype.hasOwnProperty.call(actual, key)) {
+ continue;
+ }
+ if (typeof expected[key] === 'object') {
+ if (typeof actual[key] !== 'object') {
+ writeError('mismatched_type', lang, trace ? `${trace}.${key}` : key, { expected: 'object', actual: typeof actual[key] });
+ continue;
+ }
+ verify(expected[key] as LocaleRecord, actual[key] as LocaleRecord, lang, trace ? `${trace}.${key}` : key);
+ } else if (typeof expected[key] === 'string') {
+ switch (typeof actual[key]) {
+ case 'object':
+ writeError('mismatched_type', lang, trace ? `${trace}.${key}` : key, { expected: 'string', actual: 'object' });
+ break;
+ case 'undefined':
+ continue;
+ case 'string': {
+ const expectedParameters = new Set((expected[key] as string).match(/\{[^}]+\}/g)?.map((s) => s.slice(1, -1)));
+ const actualParameters = new Set((actual[key] as string).match(/\{[^}]+\}/g)?.map((s) => s.slice(1, -1)));
+ for (const parameter of expectedParameters) {
+ if (!actualParameters.has(parameter)) {
+ writeError('missing_parameter', lang, trace ? `${trace}.${key}` : key, { parameter });
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// index.tsはtsのまま動かすことを想定していない(ビルド成果物を外部に公開する).
+// よってビルド後のものを検証する
+const locales = await import('../built/index.js');
+const { 'ja-JP': original, ...verifiees } = locales as unknown as Record;
+
+for (const lang in verifiees) {
+ if (!Object.prototype.hasOwnProperty.call(locales, lang)) {
+ continue;
+ }
+ verify(original, verifiees[lang], lang);
+}
+
+if (!valid) {
+ process.exit(1);
+}
diff --git a/locales/index.d.ts b/packages/i18n/src/autogen/locale.ts
similarity index 97%
rename from locales/index.d.ts
rename to packages/i18n/src/autogen/locale.ts
index 96d6c890a8..8f94aab555 100644
--- a/locales/index.d.ts
+++ b/packages/i18n/src/autogen/locale.ts
@@ -1,13 +1,7 @@
/* eslint-disable */
-// This file is generated by locales/generateDTS.js
+// This file is generated by scripts/generateLocaleInterface.ts
// Do not edit this file directly.
-declare const kParameters: unique symbol;
-export type ParameterizedString = string & {
- [kParameters]: T;
-};
-export interface ILocale {
- [_: string]: string | ParameterizedString | ILocale;
-}
+import { type ILocale, type ParameterizedString } from "../types.js";
export interface Locale extends ILocale {
/**
* 日本語
@@ -350,6 +344,14 @@ export interface Locale extends ILocale {
* {name}のフォローを解除しますか?
*/
"unfollowConfirm": ParameterizedString<"name">;
+ /**
+ * {name}へのフォロー申請をキャンセルしますか?
+ */
+ "cancelFollowRequestConfirm": ParameterizedString<"name">;
+ /**
+ * {name}からのフォロー申請を拒否しますか?
+ */
+ "rejectFollowRequestConfirm": ParameterizedString<"name">;
/**
* エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、「ドライブ」に追加されます。
*/
@@ -747,7 +749,7 @@ export interface Locale extends ILocale {
*/
"flagShowTimelineRepliesDescription": string;
/**
- * フォロー中ユーザーからのフォロリクを自動承認
+ * フォロー中ユーザーからのフォロー申請を自動承認
*/
"autoAcceptFollowed": string;
/**
@@ -1226,6 +1228,10 @@ export interface Locale extends ILocale {
* 既読
*/
"messageRead": string;
+ /**
+ * すべてのメッセージを既読にする
+ */
+ "readAllChatMessages": string;
/**
* これより過去の履歴はありません
*/
@@ -4106,6 +4112,18 @@ export interface Locale extends ILocale {
* 端末の電池消費量が増加する可能性があります。
*/
"sendPushNotificationReadMessageCaption": string;
+ /**
+ * ブラウザの通知設定を許可してください
+ */
+ "pleaseAllowPushNotification": string;
+ /**
+ * 通知の送信権限の取得に失敗しました
+ */
+ "browserPushNotificationDisabled": string;
+ /**
+ * {serverName}から通知を送信する権限がありません。ブラウザの設定から通知を許可して再度お試しください。
+ */
+ "browserPushNotificationDisabledDescription": ParameterizedString<"serverName">;
/**
* 最大化
*/
@@ -5605,6 +5623,176 @@ export interface Locale extends ILocale {
* 技術的なお問い合わせの際に、以下の情報を併記すると問題の解決に役立つことがあります。
*/
"deviceInfoDescription": string;
+ /**
+ * あなたは管理者です
+ */
+ "youAreAdmin": string;
+ /**
+ * フレーム
+ */
+ "frame": string;
+ /**
+ * プリセット
+ */
+ "presets": string;
+ /**
+ * ゼロ埋め
+ */
+ "zeroPadding": string;
+ "_imageEditing": {
+ "_vars": {
+ /**
+ * ファイルのキャプション
+ */
+ "caption": string;
+ /**
+ * ファイル名
+ */
+ "filename": string;
+ /**
+ * 拡張子無しファイル名
+ */
+ "filename_without_ext": string;
+ /**
+ * 撮影年
+ */
+ "year": string;
+ /**
+ * 撮影月
+ */
+ "month": string;
+ /**
+ * 撮影日
+ */
+ "day": string;
+ /**
+ * 撮影した時刻(時)
+ */
+ "hour": string;
+ /**
+ * 撮影した時刻(分)
+ */
+ "minute": string;
+ /**
+ * 撮影した時刻(秒)
+ */
+ "second": string;
+ /**
+ * カメラ名
+ */
+ "camera_model": string;
+ /**
+ * レンズ名
+ */
+ "camera_lens_model": string;
+ /**
+ * 焦点距離
+ */
+ "camera_mm": string;
+ /**
+ * 焦点距離(35mm判換算)
+ */
+ "camera_mm_35": string;
+ /**
+ * 絞り
+ */
+ "camera_f": string;
+ /**
+ * シャッタースピード
+ */
+ "camera_s": string;
+ /**
+ * ISO感度
+ */
+ "camera_iso": string;
+ /**
+ * 緯度
+ */
+ "gps_lat": string;
+ /**
+ * 経度
+ */
+ "gps_long": string;
+ };
+ };
+ "_imageFrameEditor": {
+ /**
+ * フレームの編集
+ */
+ "title": string;
+ /**
+ * 画像にフレームやメタデータを含んだラベルを追加して装飾できます。
+ */
+ "tip": string;
+ /**
+ * ヘッダー
+ */
+ "header": string;
+ /**
+ * フッター
+ */
+ "footer": string;
+ /**
+ * フチの幅
+ */
+ "borderThickness": string;
+ /**
+ * ラベルの幅
+ */
+ "labelThickness": string;
+ /**
+ * ラベルのスケール
+ */
+ "labelScale": string;
+ /**
+ * 中央揃え
+ */
+ "centered": string;
+ /**
+ * キャプション(大)
+ */
+ "captionMain": string;
+ /**
+ * キャプション(小)
+ */
+ "captionSub": string;
+ /**
+ * 利用可能な変数
+ */
+ "availableVariables": string;
+ /**
+ * 二次元コード
+ */
+ "withQrCode": string;
+ /**
+ * 背景色
+ */
+ "backgroundColor": string;
+ /**
+ * 文字色
+ */
+ "textColor": string;
+ /**
+ * フォント
+ */
+ "font": string;
+ /**
+ * セリフ
+ */
+ "fontSerif": string;
+ /**
+ * サンセリフ
+ */
+ "fontSansSerif": string;
+ /**
+ * 保存せずに終了しますか?
+ */
+ "quitWithoutSaveConfirm": string;
+ /**
+ * 画像の読み込みに失敗しました
+ */
+ "failedToLoadImage": string;
+ };
"_compression": {
"_quality": {
/**
@@ -5997,6 +6185,14 @@ export interface Locale extends ILocale {
* ページのタブバーを下部に表示
*/
"showPageTabBarBottom": string;
+ /**
+ * 絵文字ピッカーに固定表示するプリセットをパレットとして登録したり、ピッカーの表示方法をカスタマイズしたりできます。
+ */
+ "emojiPaletteBanner": string;
+ /**
+ * アニメーション画像を有効にする
+ */
+ "enableAnimatedImages": string;
"_chat": {
/**
* 送信者の名前を表示
@@ -6025,6 +6221,14 @@ export interface Locale extends ILocale {
* プロファイルの管理
*/
"manageProfiles": string;
+ /**
+ * 複数のデバイスで同一のプロファイルを共有することは推奨しません。
+ */
+ "shareSameProfileBetweenDevicesIsNotRecommended": string;
+ /**
+ * 複数のデバイスで同期したい設定項目が存在する場合は、個別に「複数のデバイスで同期」オプションを有効にしてください。
+ */
+ "useSyncBetweenDevicesOptionIfYouWantToSyncSetting": string;
};
"_preferencesBackup": {
/**
@@ -6059,6 +6263,10 @@ export interface Locale extends ILocale {
* 設定のバックアップが見つかりました
*/
"backupFound": string;
+ /**
+ * 設定の強制バックアップ
+ */
+ "forceBackup": string;
};
"_accountSettings": {
/**
@@ -9836,6 +10044,60 @@ export interface Locale extends ILocale {
* チャンネルに投稿...
*/
"channelPlaceholder": string;
+ /**
+ * フォームの説明を表示
+ */
+ "showHowToUse": string;
+ "_howToUse": {
+ /**
+ * 本文
+ */
+ "content_title": string;
+ /**
+ * 投稿する内容を入力します。
+ */
+ "content_description": string;
+ /**
+ * ツールバー
+ */
+ "toolbar_title": string;
+ /**
+ * ファイルやアンケートの添付、注釈やハッシュタグの設定、絵文字やメンションの挿入などが行えます。
+ */
+ "toolbar_description": string;
+ /**
+ * アカウントメニュー
+ */
+ "account_title": string;
+ /**
+ * 投稿するアカウントを切り替えたり、アカウントに保存した下書き・予約投稿を一覧できます。
+ */
+ "account_description": string;
+ /**
+ * 公開範囲
+ */
+ "visibility_title": string;
+ /**
+ * ノートを公開する範囲の設定が行えます。
+ */
+ "visibility_description": string;
+ /**
+ * メニュー
+ */
+ "menu_title": string;
+ /**
+ * 下書きへの保存、投稿の予約、リアクションの設定など、その他のアクションが行えます。
+ */
+ "menu_description": string;
+ /**
+ * 投稿ボタン
+ */
+ "submit_title": string;
+ /**
+ * ノートを投稿します。Ctrl + Enter / Cmd + Enter でも投稿できます。
+ */
+ "submit_description": string;
+ };
"_placeholders": {
/**
* いまどうしてる?
@@ -10890,6 +11152,14 @@ export interface Locale extends ILocale {
};
};
"_moderationLogTypes": {
+ /**
+ * ジョブキューをクリア
+ */
+ "clearQueue": string;
+ /**
+ * キューのジョブを再試行
+ */
+ "promoteQueue": string;
/**
* ロールを作成
*/
@@ -12318,7 +12588,7 @@ export interface Locale extends ILocale {
"defaultPreset": string;
"_watermarkEditor": {
/**
- * 画像にクレジット情報などのウォーターマークを追加することができます。
+ * 画像にクレジット情報などのウォーターマークを追加できます。
*/
"tip": string;
/**
@@ -12433,6 +12703,10 @@ export interface Locale extends ILocale {
* 空欄にするとアカウントのURLになります
*/
"leaveBlankToAccountUrl": string;
+ /**
+ * 画像の読み込みに失敗しました
+ */
+ "failedToLoadImage": string;
};
"_imageEffector": {
/**
@@ -12451,6 +12725,10 @@ export interface Locale extends ILocale {
* 設定項目はありません
*/
"nothingToConfigure": string;
+ /**
+ * 画像の読み込みに失敗しました
+ */
+ "failedToLoadImage": string;
"_fxs": {
/**
* 色収差
@@ -12805,8 +13083,3 @@ export interface Locale extends ILocale {
"mfm": string;
};
}
-declare const locales: {
- [lang: string]: Locale;
-};
-export function build(): Locale;
-export default locales;
diff --git a/packages/i18n/src/const.ts b/packages/i18n/src/const.ts
new file mode 100644
index 0000000000..bb690e7542
--- /dev/null
+++ b/packages/i18n/src/const.ts
@@ -0,0 +1,41 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export const languages = [
+ 'ar-SA',
+ 'ca-ES',
+ 'cs-CZ',
+ 'da-DK',
+ 'de-DE',
+ 'en-US',
+ 'es-ES',
+ 'fr-FR',
+ 'id-ID',
+ 'it-IT',
+ 'ja-JP',
+ 'ja-KS',
+ 'kab-KAB',
+ 'kn-IN',
+ 'ko-KR',
+ 'nl-NL',
+ 'no-NO',
+ 'pl-PL',
+ 'pt-PT',
+ 'ru-RU',
+ 'sk-SK',
+ 'th-TH',
+ 'tr-TR',
+ 'ug-CN',
+ 'uk-UA',
+ 'vi-VN',
+ 'zh-CN',
+ 'zh-TW',
+] as const;
+
+export const primaries = {
+ 'en': 'US',
+ 'ja': 'JP',
+ 'zh': 'CN',
+} as const satisfies Record;
diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts
new file mode 100644
index 0000000000..21d215159f
--- /dev/null
+++ b/packages/i18n/src/index.ts
@@ -0,0 +1,130 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/**
+ * Languages Loader
+ */
+
+import * as fs from 'node:fs';
+import * as yaml from 'js-yaml';
+import { languages, primaries } from './const.js';
+import type { Locale } from './autogen/locale.js';
+import type { ILocale, ParameterizedString } from './types.js';
+
+type Language = typeof languages[number];
+
+type PrimaryLang = keyof typeof primaries;
+
+type Locales = Record;
+
+/**
+ * オブジェクトを再帰的にマージする
+ */
+function merge(...args: (T | ILocale | undefined)[]): T {
+ return args.reduce((a, c) => ({
+ ...a,
+ ...c,
+ ...Object.entries(a)
+ .filter(([k]) => c && typeof c[k] === 'object')
+ .reduce>((acc, [k, v]) => {
+ acc[k] = merge(v as ILocale, (c as ILocale)[k] as ILocale);
+ return acc;
+ }, {}),
+ }), {} as ILocale) as T;
+}
+
+/**
+ * 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
+ */
+function clean (text: string) {
+ return text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
+}
+
+/**
+ * 空文字列が入ることがあり、フォールバックが動作しなくなるのでプロパティごと消す
+ */
+function removeEmpty(obj: T): T {
+ for (const [k, v] of Object.entries(obj)) {
+ if (v === '') {
+ delete obj[k];
+ } else if (typeof v === 'object') {
+ removeEmpty(v as ILocale);
+ }
+ }
+ return obj;
+}
+
+function build(): Record {
+ // vitestの挙動を調整するため、一度ローカル変数化する必要がある
+ // https://github.com/vitest-dev/vitest/issues/3988#issuecomment-1686599577
+ // https://github.com/misskey-dev/misskey/pull/14057#issuecomment-2192833785
+ const metaUrl = import.meta.url;
+ const locales = languages.reduce((a, lang) => {
+ a[lang] = (yaml.load(clean(fs.readFileSync(new URL(`./locales/${lang}.yml`, metaUrl), 'utf-8'))) ?? {}) as ILocale;
+ return a;
+ }, {} as Locales);
+
+ removeEmpty(locales);
+
+ return Object.entries(locales).reduce>((a, [k, v]) => {
+ const lang = k.split('-')[0];
+ const key = k as Language;
+
+ switch (key) {
+ case 'ja-JP':
+ a[key] = v as Locale;
+ break;
+ case 'ja-KS':
+ case 'en-US':
+ a[key] = merge(locales['ja-JP'] as Locale, v);
+ break;
+ default: {
+ const primaryLang = lang as PrimaryLang;
+ const primaryKey = (lang in primaries ? `${lang}-${primaries[primaryLang]}` : undefined) as Language | undefined;
+ a[key] = merge(
+ locales['ja-JP'] as Locale,
+ locales['en-US'],
+ primaryKey ? locales[primaryKey] : {},
+ v,
+ );
+ break;
+ }
+ }
+
+ return a;
+ }, {} as Record);
+}
+
+const locales = build() as {
+ [lang: string]: Locale;
+};
+
+/**
+ * フロントエンド用の locale JSON を書き出す
+ * Service Worker が HTTP 経由で取得するために必要
+ * @param destDir 出力先ディレクトリ(例: built/_frontend_dist_/locales)
+ * @param version バージョン文字列(ファイル名とJSON内に埋め込まれる)
+ */
+async function writeFrontendLocalesJson(destDir: string, version: string): Promise {
+ const { mkdir, writeFile } = await import('node:fs/promises');
+ const { resolve } = await import('node:path');
+
+ await mkdir(destDir, { recursive: true });
+
+ const builtLocales = build();
+ const v = { '_version_': version };
+
+ for (const [lang, locale] of Object.entries(builtLocales)) {
+ await writeFile(
+ resolve(destDir, `${lang}.${version}.json`),
+ JSON.stringify({ ...locale, ...v }),
+ 'utf-8',
+ );
+ }
+}
+
+export { locales, languages, build, writeFrontendLocalesJson };
+export type { Language, Locale, ILocale, ParameterizedString };
+export default locales;
diff --git a/packages/i18n/src/types.ts b/packages/i18n/src/types.ts
new file mode 100644
index 0000000000..cf9568e792
--- /dev/null
+++ b/packages/i18n/src/types.ts
@@ -0,0 +1,14 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+declare const kParameters: unique symbol;
+
+export type ParameterizedString = string & {
+ [kParameters]: T;
+};
+
+export interface ILocale {
+ [_: string]: string | ParameterizedString | ILocale;
+}
diff --git a/packages/i18n/tsconfig.eslint.json b/packages/i18n/tsconfig.eslint.json
new file mode 100644
index 0000000000..5aea206cd1
--- /dev/null
+++ b/packages/i18n/tsconfig.eslint.json
@@ -0,0 +1,8 @@
+{
+ "extends": "./tsconfig.json",
+ "include": [
+ "src/**/*.ts",
+ "scripts/**/*.ts",
+ "build.ts"
+ ]
+}
\ No newline at end of file
diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json
new file mode 100644
index 0000000000..31cd39b8ba
--- /dev/null
+++ b/packages/i18n/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "skipLibCheck": true
+ },
+ "include": [
+ "src/**/*.ts"
+ ]
+}
\ No newline at end of file
diff --git a/packages/icons-subsetter/package.json b/packages/icons-subsetter/package.json
index 284bced499..9ca6ee35cb 100644
--- a/packages/icons-subsetter/package.json
+++ b/packages/icons-subsetter/package.json
@@ -11,10 +11,10 @@
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
- "@types/node": "22.18.10",
+ "@types/node": "24.10.1",
"@types/wawoff2": "1.0.2",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1"
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0"
},
"dependencies": {
"@tabler/icons-webfont": "3.35.0",
diff --git a/packages/misskey-bubble-game/package.json b/packages/misskey-bubble-game/package.json
index ef05d67eff..5d3f386c96 100644
--- a/packages/misskey-bubble-game/package.json
+++ b/packages/misskey-bubble-game/package.json
@@ -7,11 +7,13 @@
"exports": {
".": {
"import": "./built/index.js",
- "types": "./built/index.d.ts"
+ "types": "./built/index.d.ts",
+ "default": "./built/index.js"
},
"./*": {
"import": "./built/*",
- "types": "./built/*"
+ "types": "./built/*",
+ "default": "./built/*"
}
},
"scripts": {
@@ -23,14 +25,14 @@
},
"devDependencies": {
"@types/matter-js": "0.20.2",
- "@types/node": "22.18.10",
+ "@types/node": "24.10.1",
"@types/seedrandom": "3.0.8",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1",
- "esbuild": "0.25.10",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "esbuild": "0.27.0",
"execa": "9.6.0",
- "glob": "11.0.3",
- "nodemon": "3.1.10",
+ "glob": "11.1.0",
+ "nodemon": "3.1.11",
"typescript": "5.9.3"
},
"files": [
diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md
index 32af619a49..fe19c00a80 100644
--- a/packages/misskey-js/etc/misskey-js.api.md
+++ b/packages/misskey-js/etc/misskey-js.api.md
@@ -938,6 +938,15 @@ type ChannelsFollowedResponse = operations['channels___followed']['responses']['
// @public (undocumented)
type ChannelsFollowRequest = operations['channels___follow']['requestBody']['content']['application/json'];
+// @public (undocumented)
+type ChannelsMuteCreateRequest = operations['channels___mute___create']['requestBody']['content']['application/json'];
+
+// @public (undocumented)
+type ChannelsMuteDeleteRequest = operations['channels___mute___delete']['requestBody']['content']['application/json'];
+
+// @public (undocumented)
+type ChannelsMuteListResponse = operations['channels___mute___list']['responses']['200']['content']['application/json'];
+
// @public (undocumented)
type ChannelsMyFavoritesResponse = operations['channels___my-favorites']['responses']['200']['content']['application/json'];
@@ -1678,6 +1687,9 @@ declare namespace entities {
ChannelsFollowRequest,
ChannelsFollowedRequest,
ChannelsFollowedResponse,
+ ChannelsMuteCreateRequest,
+ ChannelsMuteDeleteRequest,
+ ChannelsMuteListResponse,
ChannelsMyFavoritesResponse,
ChannelsOwnedRequest,
ChannelsOwnedResponse,
@@ -3500,6 +3512,7 @@ type SigninFlowRequest = {
'g-recaptcha-response'?: string | null;
'turnstile-response'?: string | null;
'm-captcha-response'?: string | null;
+ 'testcaptcha-response'?: string | null;
};
// @public (undocumented)
diff --git a/packages/misskey-js/generator/package.json b/packages/misskey-js/generator/package.json
index fca323eac9..7c4a12552d 100644
--- a/packages/misskey-js/generator/package.json
+++ b/packages/misskey-js/generator/package.json
@@ -7,15 +7,16 @@
"generate": "tsx src/generator.ts && eslint ./built/**/*.ts --fix"
},
"devDependencies": {
- "@readme/openapi-parser": "5.0.2",
- "@types/node": "22.18.10",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1",
+ "@readme/openapi-parser": "5.2.1",
+ "@types/node": "24.10.1",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
"openapi-types": "12.1.3",
- "openapi-typescript": "7.9.1",
+ "openapi-typescript": "7.10.1",
"ts-case-convert": "2.1.0",
"tsx": "4.20.6",
- "typescript": "5.9.3"
+ "typescript": "5.9.3",
+ "eslint": "9.39.1"
},
"files": [
"built"
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index b000fd8418..c66ca7a3a6 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "misskey-js",
- "version": "2025.10.2",
+ "version": "2025.12.0-alpha.1",
"description": "Misskey SDK for JavaScript",
"license": "MIT",
"main": "./built/index.js",
@@ -9,11 +9,13 @@
"exports": {
".": {
"import": "./built/index.js",
- "types": "./built/index.d.ts"
+ "types": "./built/index.d.ts",
+ "default": "./built/index.js"
},
"./*": {
"import": "./built/*",
- "types": "./built/*"
+ "types": "./built/*",
+ "default": "./built/*"
}
},
"scripts": {
@@ -35,19 +37,19 @@
"directory": "packages/misskey-js"
},
"devDependencies": {
- "@microsoft/api-extractor": "7.53.1",
- "@types/node": "22.18.10",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1",
- "@vitest/coverage-v8": "3.2.4",
- "esbuild": "0.25.10",
+ "@microsoft/api-extractor": "7.55.1",
+ "@types/node": "24.10.1",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "@vitest/coverage-v8": "4.0.13",
+ "esbuild": "0.27.0",
"execa": "9.6.0",
- "glob": "11.0.3",
+ "glob": "13.0.0",
"ncp": "2.0.0",
- "nodemon": "3.1.10",
+ "nodemon": "3.1.11",
"tsd": "0.33.0",
"typescript": "5.9.3",
- "vitest": "3.2.4",
+ "vitest": "4.0.13",
"vitest-websocket-mock": "0.5.0"
},
"files": [
diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts
index c4428efcc2..af3a09a16e 100644
--- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts
+++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts
@@ -1391,6 +1391,39 @@ declare module '../api.js' {
credential?: string | null,
): Promise>;
+ /**
+ * No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:channels*
+ */
+ request(
+ endpoint: E,
+ params: P,
+ credential?: string | null,
+ ): Promise>;
+
+ /**
+ * No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:channels*
+ */
+ request(
+ endpoint: E,
+ params: P,
+ credential?: string | null,
+ ): Promise>;
+
+ /**
+ * No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *read:channels*
+ */
+ request(
+ endpoint: E,
+ params: P,
+ credential?: string | null,
+ ): Promise>;
+
/**
* No description provided.
*
diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts
index 4b83a9dd9b..c3ef3de4e6 100644
--- a/packages/misskey-js/src/autogen/endpoint.ts
+++ b/packages/misskey-js/src/autogen/endpoint.ts
@@ -182,6 +182,9 @@ import type {
ChannelsFollowRequest,
ChannelsFollowedRequest,
ChannelsFollowedResponse,
+ ChannelsMuteCreateRequest,
+ ChannelsMuteDeleteRequest,
+ ChannelsMuteListResponse,
ChannelsMyFavoritesResponse,
ChannelsOwnedRequest,
ChannelsOwnedResponse,
@@ -782,6 +785,9 @@ export type Endpoints = {
'channels/featured': { req: EmptyRequest; res: ChannelsFeaturedResponse };
'channels/follow': { req: ChannelsFollowRequest; res: EmptyResponse };
'channels/followed': { req: ChannelsFollowedRequest; res: ChannelsFollowedResponse };
+ 'channels/mute/create': { req: ChannelsMuteCreateRequest; res: EmptyResponse };
+ 'channels/mute/delete': { req: ChannelsMuteDeleteRequest; res: EmptyResponse };
+ 'channels/mute/list': { req: EmptyRequest; res: ChannelsMuteListResponse };
'channels/my-favorites': { req: EmptyRequest; res: ChannelsMyFavoritesResponse };
'channels/owned': { req: ChannelsOwnedRequest; res: ChannelsOwnedResponse };
'channels/search': { req: ChannelsSearchRequest; res: ChannelsSearchResponse };
diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts
index 4ebe9a5155..0d57b065dc 100644
--- a/packages/misskey-js/src/autogen/entities.ts
+++ b/packages/misskey-js/src/autogen/entities.ts
@@ -185,6 +185,9 @@ export type ChannelsFeaturedResponse = operations['channels___featured']['respon
export type ChannelsFollowRequest = operations['channels___follow']['requestBody']['content']['application/json'];
export type ChannelsFollowedRequest = operations['channels___followed']['requestBody']['content']['application/json'];
export type ChannelsFollowedResponse = operations['channels___followed']['responses']['200']['content']['application/json'];
+export type ChannelsMuteCreateRequest = operations['channels___mute___create']['requestBody']['content']['application/json'];
+export type ChannelsMuteDeleteRequest = operations['channels___mute___delete']['requestBody']['content']['application/json'];
+export type ChannelsMuteListResponse = operations['channels___mute___list']['responses']['200']['content']['application/json'];
export type ChannelsMyFavoritesResponse = operations['channels___my-favorites']['responses']['200']['content']['application/json'];
export type ChannelsOwnedRequest = operations['channels___owned']['requestBody']['content']['application/json'];
export type ChannelsOwnedResponse = operations['channels___owned']['responses']['200']['content']['application/json'];
diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts
index 3e95651071..2650869590 100644
--- a/packages/misskey-js/src/autogen/types.ts
+++ b/packages/misskey-js/src/autogen/types.ts
@@ -1140,6 +1140,33 @@ export type paths = {
*/
post: operations['channels___followed'];
};
+ '/channels/mute/create': {
+ /**
+ * channels/mute/create
+ * @description No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:channels*
+ */
+ post: operations['channels___mute___create'];
+ };
+ '/channels/mute/delete': {
+ /**
+ * channels/mute/delete
+ * @description No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:channels*
+ */
+ post: operations['channels___mute___delete'];
+ };
+ '/channels/mute/list': {
+ /**
+ * channels/mute/list
+ * @description No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *read:channels*
+ */
+ post: operations['channels___mute___list'];
+ };
'/channels/my-favorites': {
/**
* channels/my-favorites
@@ -4873,7 +4900,8 @@ export type components = {
summary: string | null;
hideTitleWhenPinned: boolean;
alignCenter: boolean;
- font: string;
+ /** @enum {string} */
+ font: 'serif' | 'sans-serif';
script: string;
eyeCatchingImageId: string | null;
eyeCatchingImage: components['schemas']['DriveFile'] | null;
@@ -4920,6 +4948,8 @@ export type components = {
userId: string | null;
/** Format: url */
bannerUrl: string | null;
+ /** Format: id */
+ bannerId: string | null;
pinnedNoteIds: string[];
color: string;
isArchived: boolean;
@@ -4929,6 +4959,7 @@ export type components = {
allowRenoteToExternal: boolean;
isFollowing?: boolean;
isFavorited?: boolean;
+ isMuting?: boolean;
pinnedNotes?: components['schemas']['Note'][];
};
QueueCount: {
@@ -14790,6 +14821,192 @@ export interface operations {
};
};
};
+ channels___mute___create: {
+ requestBody: {
+ content: {
+ 'application/json': {
+ /** Format: misskey:id */
+ channelId: string;
+ /** @description A Unix Epoch timestamp that must lie in the future. `null` means an indefinite mute. */
+ expiresAt?: number | null;
+ };
+ };
+ };
+ responses: {
+ /** @description OK (without any results) */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ };
+ /** @description Client error */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Authentication error */
+ 401: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Forbidden error */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description I'm Ai */
+ 418: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Internal server error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ };
+ };
+ channels___mute___delete: {
+ requestBody: {
+ content: {
+ 'application/json': {
+ /** Format: misskey:id */
+ channelId: string;
+ };
+ };
+ };
+ responses: {
+ /** @description OK (without any results) */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ };
+ /** @description Client error */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Authentication error */
+ 401: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Forbidden error */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description I'm Ai */
+ 418: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Internal server error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ };
+ };
+ channels___mute___list: {
+ responses: {
+ /** @description OK (with results) */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Channel'][];
+ };
+ };
+ /** @description Client error */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Authentication error */
+ 401: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Forbidden error */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description I'm Ai */
+ 418: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Internal server error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ };
+ };
'channels___my-favorites': {
responses: {
/** @description OK (with results) */
@@ -36423,9 +36640,11 @@ export interface operations {
/** @default 10 */
limit?: number;
page?: number;
- /** @default [
+ /**
+ * @default [
* "-id"
- * ] */
+ * ]
+ */
sortKeys?: ('+id' | '-id' | '+updatedAt' | '-updatedAt' | '+name' | '-name' | '+host' | '-host' | '+uri' | '-uri' | '+publicUrl' | '-publicUrl' | '+type' | '-type' | '+aliases' | '-aliases' | '+category' | '-category' | '+license' | '-license' | '+isSensitive' | '-isSensitive' | '+localOnly' | '-localOnly' | '+roleIdsThatCanBeUsedThisEmojiAsReaction' | '-roleIdsThatCanBeUsedThisEmojiAsReaction')[];
};
};
diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts
index b64dd451a2..a32bc56a57 100644
--- a/packages/misskey-js/src/entities.ts
+++ b/packages/misskey-js/src/entities.ts
@@ -294,6 +294,7 @@ export type SigninFlowRequest = {
'g-recaptcha-response'?: string | null;
'turnstile-response'?: string | null;
'm-captcha-response'?: string | null;
+ 'testcaptcha-response'?: string | null;
};
export type SigninFlowResponse = {
diff --git a/packages/misskey-reversi/package.json b/packages/misskey-reversi/package.json
index f050cf1fd9..1e733ecbf4 100644
--- a/packages/misskey-reversi/package.json
+++ b/packages/misskey-reversi/package.json
@@ -7,11 +7,13 @@
"exports": {
".": {
"import": "./built/index.js",
- "types": "./built/index.d.ts"
+ "types": "./built/index.d.ts",
+ "default": "./built/index.js"
},
"./*": {
"import": "./built/*",
- "types": "./built/*"
+ "types": "./built/*",
+ "default": "./built/*"
}
},
"scripts": {
@@ -22,13 +24,13 @@
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
- "@types/node": "22.18.10",
- "@typescript-eslint/eslint-plugin": "8.46.1",
- "@typescript-eslint/parser": "8.46.1",
- "esbuild": "0.25.10",
+ "@types/node": "24.10.1",
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "esbuild": "0.27.0",
"execa": "9.6.0",
- "glob": "11.0.3",
- "nodemon": "3.1.10",
+ "glob": "11.1.0",
+ "nodemon": "3.1.11",
"typescript": "5.9.3"
},
"files": [
diff --git a/packages/shared/eslint.config.js b/packages/shared/eslint.config.js
index 860eb4a8e8..ae9fb3cd37 100644
--- a/packages/shared/eslint.config.js
+++ b/packages/shared/eslint.config.js
@@ -37,6 +37,9 @@ export default [
'no-restricted-imports': ['error', {
paths: [{ name: 'punycode' }],
}],
+ // 型の情報を利用してlintする必要があるため無効化
+ // TODO: 有効化検討
+ '@typescript-eslint/no-misused-promises': 'off',
},
},
];
diff --git a/packages/sw/build.js b/packages/sw/build.js
index a9c2e428c0..d5ca028da5 100644
--- a/packages/sw/build.js
+++ b/packages/sw/build.js
@@ -7,8 +7,9 @@
import { fileURLToPath } from 'node:url';
import * as esbuild from 'esbuild';
-import locales from '../../locales/index.js';
+import locales from 'i18n';
import meta from '../../package.json' with { type: 'json' };
+
const watch = process.argv[2]?.includes('watch');
const __dirname = fileURLToPath(new URL('.', import.meta.url));
diff --git a/packages/sw/package.json b/packages/sw/package.json
index 893701a7b4..0fe10256ce 100644
--- a/packages/sw/package.json
+++ b/packages/sw/package.json
@@ -9,15 +9,16 @@
"lint": "pnpm typecheck && pnpm eslint"
},
"dependencies": {
- "esbuild": "0.25.10",
+ "i18n": "workspace:*",
+ "esbuild": "0.27.0",
"idb-keyval": "6.2.2",
"misskey-js": "workspace:*"
},
"devDependencies": {
- "@typescript-eslint/parser": "8.46.1",
+ "@typescript-eslint/parser": "8.47.0",
"@typescript/lib-webworker": "npm:@types/serviceworker@0.0.74",
"eslint-plugin-import": "2.32.0",
- "nodemon": "3.1.10",
+ "nodemon": "3.1.11",
"typescript": "5.9.3"
},
"type": "module"
diff --git a/packages/sw/src/scripts/lang.ts b/packages/sw/src/scripts/lang.ts
index 3000160e41..40b6aa4e7b 100644
--- a/packages/sw/src/scripts/lang.ts
+++ b/packages/sw/src/scripts/lang.ts
@@ -8,7 +8,7 @@
*/
import { get, set } from 'idb-keyval';
import { I18n } from '@@/js/i18n.js';
-import type { Locale } from '../../../../locales/index.js';
+import type { Locale } from 'i18n';
class SwLang {
public cacheName = `mk-cache-${_VERSION_}`;
diff --git a/packages/sw/src/sw.ts b/packages/sw/src/sw.ts
index 298af4b4b6..5cece73401 100644
--- a/packages/sw/src/sw.ts
+++ b/packages/sw/src/sw.ts
@@ -7,7 +7,7 @@ import { get } from 'idb-keyval';
import * as Misskey from 'misskey-js';
import type { PushNotificationDataMap } from '@/types.js';
import type { I18n } from '@@/js/i18n.js';
-import type { Locale } from '../../../locales/index.js';
+import type { Locale } from 'i18n';
import { createEmptyNotification, createNotification } from '@/scripts/create-notification.js';
import { swLang } from '@/scripts/lang.js';
import * as swos from '@/scripts/operations.js';
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f2f4184e82..91d9087079 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,11 +14,11 @@ importers:
.:
dependencies:
cssnano:
- specifier: 7.1.1
- version: 7.1.1(postcss@8.5.6)
+ specifier: 7.1.2
+ version: 7.1.2(postcss@8.5.6)
esbuild:
- specifier: 0.25.10
- version: 0.25.10
+ specifier: 0.27.0
+ version: 0.27.0
execa:
specifier: 9.6.0
version: 9.6.0
@@ -26,63 +26,66 @@ importers:
specifier: 3.3.3
version: 3.3.3
glob:
- specifier: 11.0.3
- version: 11.0.3
+ specifier: 13.0.0
+ version: 13.0.0
ignore-walk:
specifier: 8.0.0
version: 8.0.0
js-yaml:
- specifier: 4.1.0
- version: 4.1.0
+ specifier: 4.1.1
+ version: 4.1.1
postcss:
specifier: 8.5.6
version: 8.5.6
tar:
- specifier: 7.5.1
- version: 7.5.1
+ specifier: 7.5.2
+ version: 7.5.2
terser:
- specifier: 5.44.0
- version: 5.44.0
+ specifier: 5.44.1
+ version: 5.44.1
typescript:
specifier: 5.9.3
version: 5.9.3
devDependencies:
+ '@eslint/js':
+ specifier: 9.39.1
+ version: 9.39.1
'@misskey-dev/eslint-plugin':
- specifier: 2.1.0
- version: 2.1.0(@eslint/compat@1.1.1)(@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0))(eslint@9.37.0)(globals@16.4.0)
+ specifier: 2.2.0
+ version: 2.2.0(@eslint/compat@1.4.0(eslint@9.39.1))(@eslint/js@9.39.1)(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)(globals@16.5.0)
'@types/js-yaml':
specifier: 4.0.9
version: 4.0.9
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
cross-env:
specifier: 10.1.0
version: 10.1.0
cypress:
- specifier: 15.4.0
- version: 15.4.0
+ specifier: 15.7.0
+ version: 15.7.0
eslint:
- specifier: 9.37.0
- version: 9.37.0
+ specifier: 9.39.1
+ version: 9.39.1
globals:
- specifier: 16.4.0
- version: 16.4.0
+ specifier: 16.5.0
+ version: 16.5.0
ncp:
specifier: 2.0.0
version: 2.0.0
pnpm:
- specifier: 10.18.2
- version: 10.18.2
+ specifier: 10.23.0
+ version: 10.23.0
start-server-and-test:
- specifier: 2.1.2
- version: 2.1.2
+ specifier: 2.1.3
+ version: 2.1.3
optionalDependencies:
'@tensorflow/tfjs-core':
specifier: 4.22.0
@@ -91,11 +94,11 @@ importers:
packages/backend:
dependencies:
'@aws-sdk/client-s3':
- specifier: 3.908.0
- version: 3.908.0
+ specifier: 3.937.0
+ version: 3.937.0
'@aws-sdk/lib-storage':
- specifier: 3.908.0
- version: 3.908.0(@aws-sdk/client-s3@3.908.0)
+ specifier: 3.937.0
+ version: 3.937.0(@aws-sdk/client-s3@3.937.0)
'@discordapp/twemoji':
specifier: 16.0.1
version: 16.0.1
@@ -106,65 +109,65 @@ importers:
specifier: 11.0.2
version: 11.0.2
'@fastify/cors':
- specifier: 10.1.0
- version: 10.1.0
+ specifier: 11.1.0
+ version: 11.1.0
'@fastify/express':
specifier: 4.0.2
version: 4.0.2
'@fastify/http-proxy':
- specifier: 10.0.2
- version: 10.0.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ specifier: 11.3.0
+ version: 11.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
'@fastify/multipart':
- specifier: 9.2.1
- version: 9.2.1
+ specifier: 9.3.0
+ version: 9.3.0
'@fastify/static':
- specifier: 8.2.0
- version: 8.2.0
- '@fastify/view':
- specifier: 10.0.2
- version: 10.0.2
+ specifier: 8.3.0
+ version: 8.3.0
+ '@kitajs/html':
+ specifier: 4.2.11
+ version: 4.2.11
'@misskey-dev/sharp-read-bmp':
specifier: 1.2.0
version: 1.2.0
'@misskey-dev/summaly':
- specifier: 5.2.4
- version: 5.2.4
+ specifier: 5.2.5
+ version: 5.2.5
'@napi-rs/canvas':
- specifier: 0.1.80
- version: 0.1.80
+ specifier: 0.1.82
+ version: 0.1.82
'@nestjs/common':
- specifier: 11.1.6
- version: 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ specifier: 11.1.9
+ version: 11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core':
- specifier: 11.1.6
- version: 11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ specifier: 11.1.9
+ version: 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/testing':
- specifier: 11.1.6
- version: 11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-express@10.4.20)
+ specifier: 11.1.9
+ version: 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(@nestjs/platform-express@11.1.9)
'@peertube/http-signature':
specifier: 1.7.0
version: 1.7.0
'@sentry/node':
- specifier: 10.20.0
- version: 10.20.0
+ specifier: 10.26.0
+ version: 10.26.0
'@sentry/profiling-node':
- specifier: 10.20.0
- version: 10.20.0
+ specifier: 10.26.0
+ version: 10.26.0
'@simplewebauthn/server':
- specifier: 12.0.0
- version: 12.0.0(encoding@0.1.13)
+ specifier: 13.2.2
+ version: 13.2.2
'@sinonjs/fake-timers':
specifier: 15.0.0
version: 15.0.0
'@smithy/node-http-handler':
- specifier: 2.5.0
- version: 2.5.0
+ specifier: 4.4.5
+ version: 4.4.5
'@swc/cli':
- specifier: 0.7.8
- version: 0.7.8(@swc/core@1.13.5)(chokidar@4.0.3)
+ specifier: 0.7.9
+ version: 0.7.9(@swc/core@1.15.3)(chokidar@4.0.3)
'@swc/core':
- specifier: 1.13.5
- version: 1.13.5
+ specifier: 1.15.3
+ version: 1.15.3
'@twemoji/parser':
specifier: 16.0.0
version: 16.0.0
@@ -184,23 +187,23 @@ importers:
specifier: 0.5.0
version: 0.5.0
bcryptjs:
- specifier: 2.4.3
- version: 2.4.3
+ specifier: 3.0.3
+ version: 3.0.3
blurhash:
specifier: 2.0.5
version: 2.0.5
body-parser:
- specifier: 1.20.3
- version: 1.20.3
+ specifier: 2.2.0
+ version: 2.2.0
bullmq:
- specifier: 5.61.0
- version: 5.61.0
+ specifier: 5.64.1
+ version: 5.64.1
cacheable-lookup:
specifier: 7.0.0
version: 7.0.0
cbor:
- specifier: 9.0.2
- version: 9.0.2
+ specifier: 10.0.11
+ version: 10.0.11
chalk:
specifier: 5.6.2
version: 5.6.2
@@ -210,57 +213,51 @@ importers:
chokidar:
specifier: 4.0.3
version: 4.0.3
- cli-highlight:
- specifier: 2.1.11
- version: 2.1.11
color-convert:
- specifier: 2.0.1
- version: 2.0.1
+ specifier: 3.1.3
+ version: 3.1.3
content-disposition:
- specifier: 0.5.4
- version: 0.5.4
+ specifier: 1.0.1
+ version: 1.0.1
date-fns:
- specifier: 2.30.0
- version: 2.30.0
+ specifier: 4.1.0
+ version: 4.1.0
deep-email-validator:
specifier: 0.1.21
version: 0.1.21
fastify:
- specifier: 5.6.1
- version: 5.6.1
+ specifier: 5.6.2
+ version: 5.6.2
fastify-raw-body:
specifier: 5.0.0
version: 5.0.0
feed:
- specifier: 4.2.2
- version: 4.2.2
+ specifier: 5.1.0
+ version: 5.1.0
file-type:
- specifier: 21.0.0
- version: 21.0.0
+ specifier: 21.1.1
+ version: 21.1.1
fluent-ffmpeg:
specifier: 2.1.3
version: 2.1.3
form-data:
- specifier: 4.0.4
- version: 4.0.4
+ specifier: 4.0.5
+ version: 4.0.5
got:
- specifier: 14.5.0
- version: 14.5.0
- happy-dom:
- specifier: 20.0.7
- version: 20.0.7
+ specifier: 14.6.4
+ version: 14.6.4
hpagent:
specifier: 1.2.0
version: 1.2.0
- htmlescape:
- specifier: 1.1.1
- version: 1.1.1
http-link-header:
specifier: 1.1.3
version: 1.1.3
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
ioredis:
- specifier: 5.8.1
- version: 5.8.1
+ specifier: 5.8.2
+ version: 5.8.2
ip-cidr:
specifier: 4.0.2
version: 4.0.2
@@ -268,20 +265,14 @@ importers:
specifier: 2.2.0
version: 2.2.0
is-svg:
- specifier: 5.1.0
- version: 5.1.0
- js-yaml:
- specifier: 4.1.0
- version: 4.1.0
- jsdom:
- specifier: 26.1.0
- version: 26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5)
+ specifier: 6.1.0
+ version: 6.1.0
json5:
specifier: 2.2.3
version: 2.2.3
jsonld:
- specifier: 8.3.3
- version: 8.3.3(web-streams-polyfill@4.0.0)
+ specifier: 9.0.0
+ version: 9.0.0
jsrsasign:
specifier: 11.1.0
version: 11.1.0
@@ -289,17 +280,14 @@ importers:
specifier: 11.0.3
version: 11.0.3
meilisearch:
- specifier: 0.53.0
- version: 0.53.0
+ specifier: 0.54.0
+ version: 0.54.0
mfm-js:
specifier: 0.25.0
version: 0.25.0
- microformats-parser:
- specifier: 2.0.4
- version: 2.0.4
mime-types:
- specifier: 2.1.35
- version: 2.1.35
+ specifier: 3.0.2
+ version: 3.0.2
misskey-js:
specifier: workspace:*
version: link:../misskey-js
@@ -318,9 +306,12 @@ importers:
node-fetch:
specifier: 3.3.2
version: 3.3.2
+ node-html-parser:
+ specifier: 7.0.1
+ version: 7.0.1
nodemailer:
- specifier: 7.0.9
- version: 7.0.9
+ specifier: 7.0.10
+ version: 7.0.10
nsfwjs:
specifier: 4.2.0
version: 4.2.0(@tensorflow/tfjs@4.22.0(encoding@0.1.13)(seedrandom@3.0.5))(buffer@6.0.3)
@@ -339,24 +330,18 @@ importers:
otpauth:
specifier: 9.4.1
version: 9.4.1
- parse5:
- specifier: 7.3.0
- version: 7.3.0
pg:
specifier: 8.16.3
version: 8.16.3
pkce-challenge:
- specifier: 4.1.0
- version: 4.1.0
+ specifier: 5.0.0
+ version: 5.0.0
probe-image-size:
specifier: 7.2.3
version: 7.2.3
promise-limit:
specifier: 2.7.0
version: 2.7.0
- pug:
- specifier: 3.0.3
- version: 3.0.3
qrcode:
specifier: 1.5.4
version: 1.5.4
@@ -367,14 +352,11 @@ importers:
specifier: 3.4.1
version: 3.4.1
re2:
- specifier: 1.22.1
- version: 1.22.1
+ specifier: 1.22.3
+ version: 1.22.3
redis-info:
specifier: 3.1.0
version: 3.1.0
- redis-lock:
- specifier: 0.1.4
- version: 0.1.4
reflect-metadata:
specifier: 0.2.2
version: 0.2.2
@@ -391,8 +373,8 @@ importers:
specifier: 2.17.0
version: 2.17.0
secure-json-parse:
- specifier: 3.0.2
- version: 3.0.2
+ specifier: 4.1.0
+ version: 4.1.0
semver:
specifier: 7.7.3
version: 7.7.3
@@ -425,13 +407,13 @@ importers:
version: 4.2.0
typeorm:
specifier: 0.3.27
- version: 0.3.27(ioredis@5.8.1)(pg@8.16.3)(reflect-metadata@0.2.2)
+ version: 0.3.27(ioredis@5.8.2)(pg@8.16.3)(reflect-metadata@0.2.2)
typescript:
specifier: 5.9.3
version: 5.9.3
ulid:
- specifier: 2.4.0
- version: 2.4.0
+ specifier: 3.0.1
+ version: 3.0.1
vary:
specifier: 1.1.2
version: 1.1.2
@@ -445,12 +427,15 @@ importers:
specifier: 3.0.2
version: 3.0.2
devDependencies:
+ '@kitajs/ts-html-plugin':
+ specifier: 4.1.3
+ version: 4.1.3(@kitajs/html@4.2.11)(typescript@5.9.3)
'@nestjs/platform-express':
- specifier: 10.4.20
- version: 10.4.20(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)
+ specifier: 11.1.9
+ version: 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)
'@sentry/vue':
- specifier: 10.20.0
- version: 10.20.0(vue@3.5.22(typescript@5.9.3))
+ specifier: 10.26.0
+ version: 10.26.0(vue@3.5.24(typescript@5.9.3))
'@simplewebauthn/types':
specifier: 12.0.0
version: 12.0.0
@@ -458,11 +443,8 @@ importers:
specifier: 1.3.7
version: 1.3.7
'@types/archiver':
- specifier: 6.0.3
- version: 6.0.3
- '@types/bcryptjs':
- specifier: 2.4.6
- version: 2.4.6
+ specifier: 7.0.0
+ version: 7.0.0
'@types/body-parser':
specifier: 1.19.6
version: 1.19.6
@@ -473,20 +455,14 @@ importers:
specifier: 0.5.9
version: 0.5.9
'@types/fluent-ffmpeg':
- specifier: 2.1.27
- version: 2.1.27
- '@types/htmlescape':
- specifier: 1.1.3
- version: 1.1.3
+ specifier: 2.1.28
+ version: 2.1.28
'@types/http-link-header':
specifier: 1.0.7
version: 1.0.7
'@types/js-yaml':
specifier: 4.0.9
version: 4.0.9
- '@types/jsdom':
- specifier: 21.1.7
- version: 21.1.7
'@types/jsonld':
specifier: 1.5.15
version: 1.5.15
@@ -494,17 +470,17 @@ importers:
specifier: 10.5.15
version: 10.5.15
'@types/mime-types':
- specifier: 2.1.4
- version: 2.1.4
+ specifier: 3.0.1
+ version: 3.0.1
'@types/ms':
- specifier: 0.7.34
- version: 0.7.34
+ specifier: 2.1.0
+ version: 2.1.0
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@types/nodemailer':
- specifier: 6.4.20
- version: 6.4.20
+ specifier: 7.0.4
+ version: 7.0.4
'@types/oauth':
specifier: 0.9.6
version: 0.9.6
@@ -515,14 +491,11 @@ importers:
specifier: 0.1.2
version: 0.1.2
'@types/pg':
- specifier: 8.15.5
- version: 8.15.5
- '@types/pug':
- specifier: 2.0.10
- version: 2.0.10
+ specifier: 8.15.6
+ version: 8.15.6
'@types/qrcode':
- specifier: 1.5.5
- version: 1.5.5
+ specifier: 1.5.6
+ version: 1.5.6
'@types/random-seed':
specifier: 0.3.5
version: 0.3.5
@@ -542,8 +515,8 @@ importers:
specifier: 5.0.7
version: 5.0.7
'@types/sinonjs__fake-timers':
- specifier: 8.1.5
- version: 8.1.5
+ specifier: 15.0.1
+ version: 15.0.1
'@types/supertest':
specifier: 6.0.3
version: 6.0.3
@@ -563,38 +536,44 @@ importers:
specifier: 8.18.1
version: 8.18.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 3.2.4
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ specifier: 4.0.13
+ version: 4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
aws-sdk-client-mock:
specifier: 4.1.0
version: 4.1.0
cross-env:
- specifier: 7.0.3
- version: 7.0.3
+ specifier: 10.1.0
+ version: 10.1.0
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)
+ version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
execa:
- specifier: 8.0.1
- version: 8.0.1
+ specifier: 9.6.0
+ version: 9.6.0
fkill:
- specifier: 9.0.0
- version: 9.0.0
+ specifier: 10.0.1
+ version: 10.0.1
jest-mock:
specifier: 29.7.0
version: 29.7.0
+ jest-util:
+ specifier: 29.7.0
+ version: 29.7.0
+ js-yaml:
+ specifier: 4.1.1
+ version: 4.1.1
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
pid-port:
- specifier: 1.0.2
- version: 1.0.2
+ specifier: 2.0.0
+ version: 2.0.0
simple-oauth2:
specifier: 5.1.0
version: 5.1.0
@@ -603,47 +582,50 @@ importers:
version: 7.1.4
unplugin-swc:
specifier: 1.5.8
- version: 1.5.8(@swc/core@1.13.5)(rollup@4.52.4)
+ version: 1.5.8(@swc/core@1.15.3)(rollup@4.53.3)
+ vite:
+ specifier: 7.2.4
+ version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
vitest:
- specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ specifier: 4.0.13
+ version: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
optionalDependencies:
'@swc/core-android-arm64':
specifier: 1.3.11
version: 1.3.11
'@swc/core-darwin-arm64':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-darwin-x64':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-freebsd-x64':
specifier: 1.3.11
version: 1.3.11
'@swc/core-linux-arm-gnueabihf':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-linux-arm64-gnu':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-linux-arm64-musl':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-linux-x64-gnu':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-linux-x64-musl':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-win32-arm64-msvc':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-win32-ia32-msvc':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@swc/core-win32-x64-msvc':
- specifier: 1.13.20
- version: 1.13.20
+ specifier: 1.15.3
+ version: 1.15.3
'@tensorflow/tfjs':
specifier: 4.22.0
version: 4.22.0(encoding@0.1.13)(seedrandom@3.0.5)
@@ -715,19 +697,19 @@ importers:
version: 2024.1.0
'@rollup/plugin-json':
specifier: 6.1.0
- version: 6.1.0(rollup@4.52.4)
+ version: 6.1.0(rollup@4.53.3)
'@rollup/plugin-replace':
- specifier: 6.0.2
- version: 6.0.2(rollup@4.52.4)
+ specifier: 6.0.3
+ version: 6.0.3(rollup@4.53.3)
'@rollup/pluginutils':
specifier: 5.3.0
- version: 5.3.0(rollup@4.52.4)
+ version: 5.3.0(rollup@4.53.3)
'@sentry/vue':
- specifier: 10.20.0
- version: 10.20.0(vue@3.5.22(typescript@5.9.3))
+ specifier: 10.26.0
+ version: 10.26.0(vue@3.5.24(typescript@5.9.3))
'@syuilo/aiscript':
- specifier: 1.1.2
- version: 1.1.2
+ specifier: 1.2.0
+ version: 1.2.0
'@syuilo/aiscript-0-19-0':
specifier: npm:@syuilo/aiscript@^0.19.0
version: '@syuilo/aiscript@0.19.0'
@@ -735,11 +717,11 @@ importers:
specifier: 16.0.0
version: 16.0.0
'@vitejs/plugin-vue':
- specifier: 6.0.1
- version: 6.0.1(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))(vue@3.5.22(typescript@5.9.3))
+ specifier: 6.0.2
+ version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))
'@vue/compiler-sfc':
- specifier: 3.5.22
- version: 3.5.22
+ specifier: 3.5.24
+ version: 3.5.24
aiscript-vscode:
specifier: github:aiscript-dev/aiscript-vscode#v0.1.15
version: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7
@@ -750,14 +732,14 @@ importers:
specifier: 1.9.0
version: 1.9.0
broadcast-channel:
- specifier: 7.1.0
- version: 7.1.0
+ specifier: 7.2.0
+ version: 7.2.0
buraha:
specifier: 0.0.1
version: 0.0.1
canvas-confetti:
- specifier: 1.9.3
- version: 1.9.3
+ specifier: 1.9.4
+ version: 1.9.4
chart.js:
specifier: 4.5.1
version: 4.5.1
@@ -774,14 +756,14 @@ importers:
specifier: 2.2.0
version: 2.2.0(chart.js@4.5.1)
chromatic:
- specifier: 13.3.0
- version: 13.3.0
+ specifier: 13.3.4
+ version: 13.3.4
compare-versions:
specifier: 6.1.1
version: 6.1.1
cropperjs:
- specifier: 2.0.1
- version: 2.0.1
+ specifier: 2.1.0
+ version: 2.1.0
date-fns:
specifier: 4.1.0
version: 4.1.0
@@ -794,9 +776,15 @@ importers:
execa:
specifier: 9.6.0
version: 9.6.0
+ exifreader:
+ specifier: 4.32.0
+ version: 4.32.0
frontend-shared:
specifier: workspace:*
version: link:../frontend-shared
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
icons-subsetter:
specifier: workspace:*
version: link:../icons-subsetter
@@ -816,14 +804,14 @@ importers:
specifier: 2.2.3
version: 2.2.3
magic-string:
- specifier: 0.30.19
- version: 0.30.19
+ specifier: 0.30.21
+ version: 0.30.21
matter-js:
specifier: 0.20.0
version: 0.20.0
mediabunny:
- specifier: 1.23.0
- version: 1.23.0
+ specifier: 1.25.1
+ version: 1.25.1
mfm-js:
specifier: 0.25.0
version: 0.25.0
@@ -849,17 +837,17 @@ importers:
specifier: 1.4.2
version: 1.4.2
rollup:
- specifier: 4.52.4
- version: 4.52.4
+ specifier: 4.53.3
+ version: 4.53.3
sanitize-html:
specifier: 2.17.0
version: 2.17.0
sass:
- specifier: 1.93.2
- version: 1.93.2
+ specifier: 1.94.2
+ version: 1.94.2
shiki:
- specifier: 3.13.0
- version: 3.13.0
+ specifier: 3.15.0
+ version: 3.15.0
strict-event-emitter-types:
specifier: 2.0.0
version: 2.0.0
@@ -867,8 +855,8 @@ importers:
specifier: 3.1.0
version: 3.1.0
three:
- specifier: 0.180.0
- version: 0.180.0
+ specifier: 0.181.2
+ version: 0.181.2
throttle-debounce:
specifier: 5.0.2
version: 5.0.2
@@ -886,80 +874,80 @@ importers:
version: 5.9.3
v-code-diff:
specifier: 1.13.1
- version: 1.13.1(vue@3.5.22(typescript@5.9.3))
+ version: 1.13.1(vue@3.5.24(typescript@5.9.3))
vite:
- specifier: 7.1.9
- version: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ specifier: 7.2.4
+ version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
vue:
- specifier: 3.5.22
- version: 3.5.22(typescript@5.9.3)
+ specifier: 3.5.24
+ version: 3.5.24(typescript@5.9.3)
vuedraggable:
specifier: next
- version: 4.1.0(vue@3.5.22(typescript@5.9.3))
+ version: 4.1.0(vue@3.5.24(typescript@5.9.3))
wanakana:
specifier: 5.3.1
version: 5.3.1
devDependencies:
'@misskey-dev/summaly':
- specifier: 5.2.4
- version: 5.2.4
+ specifier: 5.2.5
+ version: 5.2.5
'@storybook/addon-essentials':
specifier: 8.6.14
- version: 8.6.14(@types/react@18.0.28)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/addon-interactions':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/addon-links':
- specifier: 9.1.10
- version: 9.1.10(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ specifier: 10.0.8
+ version: 10.0.8(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/addon-mdx-gfm':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/addon-storysource':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/blocks':
specifier: 8.6.14
- version: 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/components':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/core-events':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/manager-api':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/preview-api':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/react':
- specifier: 9.1.10
- version: 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(typescript@5.9.3)
+ specifier: 10.0.8
+ version: 10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)
'@storybook/react-vite':
- specifier: 9.1.10
- version: 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.4)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ specifier: 10.0.8
+ version: 10.0.8(esbuild@0.27.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
'@storybook/test':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/theming':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/types':
specifier: 8.6.14
- version: 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@storybook/vue3':
- specifier: 9.1.10
- version: 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vue@3.5.22(typescript@5.9.3))
+ specifier: 10.0.8
+ version: 10.0.8(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vue@3.5.24(typescript@5.9.3))
'@storybook/vue3-vite':
- specifier: 9.1.10
- version: 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))(vue@3.5.22(typescript@5.9.3))
+ specifier: 10.0.8
+ version: 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))
'@tabler/icons-webfont':
specifier: 3.35.0
version: 3.35.0
'@testing-library/vue':
specifier: 8.1.0
- version: 8.1.0(@vue/compiler-sfc@3.5.22)(@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))
+ version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))
'@types/canvas-confetti':
specifier: 1.9.0
version: 1.9.0
@@ -970,11 +958,11 @@ importers:
specifier: 0.20.2
version: 0.20.2
'@types/micromatch':
- specifier: 4.0.9
- version: 4.0.9
+ specifier: 4.0.10
+ version: 4.0.10
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@types/punycode.js':
specifier: npm:@types/punycode@2.1.4
version: '@types/punycode@2.1.4'
@@ -994,20 +982,20 @@ importers:
specifier: 8.18.1
version: 8.18.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 3.2.4
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ specifier: 4.0.13
+ version: 4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
'@vue/compiler-core':
- specifier: 3.5.22
- version: 3.5.22
+ specifier: 3.5.24
+ version: 3.5.24
'@vue/runtime-core':
- specifier: 3.5.22
- version: 3.5.22
+ specifier: 3.5.24
+ version: 3.5.24
acorn:
specifier: 8.15.0
version: 8.15.0
@@ -1015,20 +1003,20 @@ importers:
specifier: 10.1.0
version: 10.1.0
cypress:
- specifier: 15.4.0
- version: 15.4.0
+ specifier: 15.7.0
+ version: 15.7.0
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)
+ version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
eslint-plugin-vue:
- specifier: 10.5.0
- version: 10.5.0(@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(vue-eslint-parser@10.2.0(eslint@9.37.0))
+ specifier: 10.6.0
+ version: 10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
fast-glob:
specifier: 3.3.3
version: 3.3.3
happy-dom:
- specifier: 20.0.7
- version: 20.0.7
+ specifier: 20.0.10
+ version: 20.0.10
intersection-observer:
specifier: 0.12.2
version: 0.12.2
@@ -1036,17 +1024,17 @@ importers:
specifier: 4.0.8
version: 4.0.8
minimatch:
- specifier: 10.0.3
- version: 10.0.3
+ specifier: 10.1.1
+ version: 10.1.1
msw:
- specifier: 2.11.5
- version: 2.11.5(@types/node@22.18.10)(typescript@5.9.3)
+ specifier: 2.12.2
+ version: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
msw-storybook-addon:
specifier: 2.0.6
- version: 2.0.6(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))
+ version: 2.0.6(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
prettier:
specifier: 3.6.2
version: 3.6.2
@@ -1060,66 +1048,69 @@ importers:
specifier: 3.0.5
version: 3.0.5
start-server-and-test:
- specifier: 2.1.2
- version: 2.1.2
+ specifier: 2.1.3
+ version: 2.1.3
storybook:
- specifier: 9.1.10
- version: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ specifier: 10.0.8
+ version: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
storybook-addon-misskey-theme:
specifier: github:misskey-dev/storybook-addon-misskey-theme
- version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(eea6f1ff14bf28d064537fe27aa8f490)
+ version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(17b0cdbdd96b793834b84d8d4dddb88b)
tsx:
specifier: 4.20.6
version: 4.20.6
vite-plugin-glsl:
specifier: 1.5.4
- version: 1.5.4(@rollup/pluginutils@5.3.0(rollup@4.52.4))(esbuild@0.25.10)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ version: 1.5.4(@rollup/pluginutils@5.3.0(rollup@4.53.3))(esbuild@0.27.0)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
vite-plugin-turbosnap:
specifier: 1.0.3
version: 1.0.3
vitest:
- specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ specifier: 4.0.13
+ version: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
vitest-fetch-mock:
specifier: 0.4.5
- version: 0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ version: 0.4.5(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
vue-component-type-helpers:
- specifier: 3.1.1
- version: 3.1.1
+ specifier: 3.1.5
+ version: 3.1.5
vue-eslint-parser:
specifier: 10.2.0
- version: 10.2.0(eslint@9.37.0)
+ version: 10.2.0(eslint@9.39.1)
vue-tsc:
- specifier: 3.1.1
- version: 3.1.1(typescript@5.9.3)
+ specifier: 3.1.5
+ version: 3.1.5(typescript@5.9.3)
packages/frontend-builder:
dependencies:
estree-walker:
specifier: 3.0.3
version: 3.0.3
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
magic-string:
- specifier: 0.30.19
- version: 0.30.19
+ specifier: 0.30.21
+ version: 0.30.21
vite:
- specifier: 7.1.9
- version: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ specifier: 7.2.4
+ version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
devDependencies:
'@types/estree':
specifier: 1.0.8
version: 1.0.8
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
rollup:
- specifier: 4.52.4
- version: 4.52.4
+ specifier: 4.53.3
+ version: 4.53.3
typescript:
specifier: 5.9.3
version: 5.9.3
@@ -1131,22 +1122,22 @@ importers:
version: 16.0.1
'@rollup/plugin-json':
specifier: 6.1.0
- version: 6.1.0(rollup@4.52.4)
+ version: 6.1.0(rollup@4.53.3)
'@rollup/plugin-replace':
- specifier: 6.0.2
- version: 6.0.2(rollup@4.52.4)
+ specifier: 6.0.3
+ version: 6.0.3(rollup@4.53.3)
'@rollup/pluginutils':
specifier: 5.3.0
- version: 5.3.0(rollup@4.52.4)
+ version: 5.3.0(rollup@4.53.3)
'@twemoji/parser':
specifier: 16.0.0
version: 16.0.0
'@vitejs/plugin-vue':
- specifier: 6.0.1
- version: 6.0.1(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))(vue@3.5.22(typescript@5.9.3))
+ specifier: 6.0.2
+ version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))
'@vue/compiler-sfc':
- specifier: 3.5.22
- version: 3.5.22
+ specifier: 3.5.24
+ version: 3.5.24
astring:
specifier: 1.9.0
version: 1.9.0
@@ -1159,6 +1150,9 @@ importers:
frontend-shared:
specifier: workspace:*
version: link:../frontend-shared
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
icons-subsetter:
specifier: workspace:*
version: link:../icons-subsetter
@@ -1175,14 +1169,14 @@ importers:
specifier: 2.3.1
version: 2.3.1
rollup:
- specifier: 4.52.4
- version: 4.52.4
+ specifier: 4.53.3
+ version: 4.53.3
sass:
- specifier: 1.93.2
- version: 1.93.2
+ specifier: 1.94.2
+ version: 1.94.2
shiki:
- specifier: 3.13.0
- version: 3.13.0
+ specifier: 3.15.0
+ version: 3.15.0
tinycolor2:
specifier: 1.6.0
version: 1.6.0
@@ -1199,30 +1193,30 @@ importers:
specifier: 13.0.0
version: 13.0.0
vite:
- specifier: 7.1.9
- version: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ specifier: 7.2.4
+ version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
vue:
- specifier: 3.5.22
- version: 3.5.22(typescript@5.9.3)
+ specifier: 3.5.24
+ version: 3.5.24(typescript@5.9.3)
devDependencies:
'@misskey-dev/summaly':
- specifier: 5.2.4
- version: 5.2.4
+ specifier: 5.2.5
+ version: 5.2.5
'@tabler/icons-webfont':
specifier: 3.35.0
version: 3.35.0
'@testing-library/vue':
specifier: 8.1.0
- version: 8.1.0(@vue/compiler-sfc@3.5.22)(@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))
+ version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))
'@types/estree':
specifier: 1.0.8
version: 1.0.8
'@types/micromatch':
- specifier: 4.0.9
- version: 4.0.9
+ specifier: 4.0.10
+ version: 4.0.10
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@types/punycode.js':
specifier: npm:@types/punycode@2.1.4
version: '@types/punycode@2.1.4'
@@ -1233,17 +1227,17 @@ importers:
specifier: 8.18.1
version: 8.18.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 3.2.4
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ specifier: 4.0.13
+ version: 4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
'@vue/runtime-core':
- specifier: 3.5.22
- version: 3.5.22
+ specifier: 3.5.24
+ version: 3.5.24
acorn:
specifier: 8.15.0
version: 8.15.0
@@ -1252,16 +1246,16 @@ importers:
version: 10.1.0
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)
+ version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
eslint-plugin-vue:
- specifier: 10.5.0
- version: 10.5.0(@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(vue-eslint-parser@10.2.0(eslint@9.37.0))
+ specifier: 10.6.0
+ version: 10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
fast-glob:
specifier: 3.3.3
version: 3.3.3
happy-dom:
- specifier: 20.0.7
- version: 20.0.7
+ specifier: 20.0.10
+ version: 20.0.10
intersection-observer:
specifier: 0.12.2
version: 0.12.2
@@ -1269,17 +1263,17 @@ importers:
specifier: 4.0.8
version: 4.0.8
msw:
- specifier: 2.11.5
- version: 2.11.5(@types/node@22.18.10)(typescript@5.9.3)
+ specifier: 2.12.2
+ version: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
prettier:
specifier: 3.6.2
version: 3.6.2
start-server-and-test:
- specifier: 2.1.2
- version: 2.1.2
+ specifier: 2.1.3
+ version: 2.1.3
tsx:
specifier: 4.20.6
version: 4.20.6
@@ -1287,48 +1281,91 @@ importers:
specifier: 1.0.3
version: 1.0.3
vue-component-type-helpers:
- specifier: 3.1.1
- version: 3.1.1
+ specifier: 3.1.5
+ version: 3.1.5
vue-eslint-parser:
specifier: 10.2.0
- version: 10.2.0(eslint@9.37.0)
+ version: 10.2.0(eslint@9.39.1)
vue-tsc:
- specifier: 3.1.1
- version: 3.1.1(typescript@5.9.3)
+ specifier: 3.1.5
+ version: 3.1.5(typescript@5.9.3)
packages/frontend-shared:
dependencies:
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
misskey-js:
specifier: workspace:*
version: link:../misskey-js
vue:
- specifier: 3.5.22
- version: 3.5.22(typescript@5.9.3)
+ specifier: 3.5.24
+ version: 3.5.24(typescript@5.9.3)
devDependencies:
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
esbuild:
- specifier: 0.25.10
- version: 0.25.10
+ specifier: 0.27.0
+ version: 0.27.0
eslint-plugin-vue:
- specifier: 10.5.0
- version: 10.5.0(@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(vue-eslint-parser@10.2.0(eslint@9.37.0))
+ specifier: 10.6.0
+ version: 10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
typescript:
specifier: 5.9.3
version: 5.9.3
vue-eslint-parser:
specifier: 10.2.0
- version: 10.2.0(eslint@9.37.0)
+ version: 10.2.0(eslint@9.39.1)
+
+ packages/i18n:
+ dependencies:
+ js-yaml:
+ specifier: 4.1.1
+ version: 4.1.1
+ devDependencies:
+ '@types/js-yaml':
+ specifier: 4.0.9
+ version: 4.0.9
+ '@types/node':
+ specifier: 24.10.1
+ version: 24.10.1
+ '@typescript-eslint/eslint-plugin':
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser':
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ chokidar:
+ specifier: 4.0.3
+ version: 4.0.3
+ esbuild:
+ specifier: 0.27.0
+ version: 0.27.0
+ execa:
+ specifier: 9.6.0
+ version: 9.6.0
+ glob:
+ specifier: 11.1.0
+ version: 11.1.0
+ nodemon:
+ specifier: 3.1.11
+ version: 3.1.11
+ tsx:
+ specifier: 4.20.6
+ version: 4.20.6
+ typescript:
+ specifier: 5.9.3
+ version: 5.9.3
packages/icons-subsetter:
dependencies:
@@ -1352,17 +1389,17 @@ importers:
version: 2.0.1
devDependencies:
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@types/wawoff2':
specifier: 1.0.2
version: 1.0.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
packages/misskey-bubble-game:
dependencies:
@@ -1380,29 +1417,29 @@ importers:
specifier: 0.20.2
version: 0.20.2
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@types/seedrandom':
specifier: 3.0.8
version: 3.0.8
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
esbuild:
- specifier: 0.25.10
- version: 0.25.10
+ specifier: 0.27.0
+ version: 0.27.0
execa:
specifier: 9.6.0
version: 9.6.0
glob:
- specifier: 11.0.3
- version: 11.0.3
+ specifier: 11.1.0
+ version: 11.1.0
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
typescript:
specifier: 5.9.3
version: 5.9.3
@@ -1420,35 +1457,35 @@ importers:
version: 4.4.0
devDependencies:
'@microsoft/api-extractor':
- specifier: 7.53.1
- version: 7.53.1(@types/node@22.18.10)
+ specifier: 7.55.1
+ version: 7.55.1(@types/node@24.10.1)
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 3.2.4
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ specifier: 4.0.13
+ version: 4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
esbuild:
- specifier: 0.25.10
- version: 0.25.10
+ specifier: 0.27.0
+ version: 0.27.0
execa:
specifier: 9.6.0
version: 9.6.0
glob:
- specifier: 11.0.3
- version: 11.0.3
+ specifier: 13.0.0
+ version: 13.0.0
ncp:
specifier: 2.0.0
version: 2.0.0
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
tsd:
specifier: 0.33.0
version: 0.33.0
@@ -1456,32 +1493,35 @@ importers:
specifier: 5.9.3
version: 5.9.3
vitest:
- specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ specifier: 4.0.13
+ version: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
vitest-websocket-mock:
specifier: 0.5.0
- version: 0.5.0(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ version: 0.5.0(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
packages/misskey-js/generator:
devDependencies:
'@readme/openapi-parser':
- specifier: 5.0.2
- version: 5.0.2(openapi-types@12.1.3)
+ specifier: 5.2.1
+ version: 5.2.1(openapi-types@12.1.3)
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ eslint:
+ specifier: 9.39.1
+ version: 9.39.1
openapi-types:
specifier: 12.1.3
version: 12.1.3
openapi-typescript:
- specifier: 7.9.1
- version: 7.9.1(typescript@5.9.3)
+ specifier: 7.10.1
+ version: 7.10.1(typescript@5.9.3)
ts-case-convert:
specifier: 2.1.0
version: 2.1.0
@@ -1499,26 +1539,26 @@ importers:
version: 1.2.2
devDependencies:
'@types/node':
- specifier: 22.18.10
- version: 22.18.10
+ specifier: 24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.46.1
- version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
esbuild:
- specifier: 0.25.10
- version: 0.25.10
+ specifier: 0.27.0
+ version: 0.27.0
execa:
specifier: 9.6.0
version: 9.6.0
glob:
- specifier: 11.0.3
- version: 11.0.3
+ specifier: 11.1.0
+ version: 11.1.0
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
typescript:
specifier: 5.9.3
version: 5.9.3
@@ -1526,8 +1566,11 @@ importers:
packages/sw:
dependencies:
esbuild:
- specifier: 0.25.10
- version: 0.25.10
+ specifier: 0.27.0
+ version: 0.27.0
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
idb-keyval:
specifier: 6.2.2
version: 6.2.2
@@ -1536,30 +1579,29 @@ importers:
version: link:../misskey-js
devDependencies:
'@typescript-eslint/parser':
- specifier: 8.46.1
- version: 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ specifier: 8.47.0
+ version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
'@typescript/lib-webworker':
specifier: npm:@types/serviceworker@0.0.74
version: '@types/serviceworker@0.0.74'
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)
+ version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
nodemon:
- specifier: 3.1.10
- version: 3.1.10
+ specifier: 3.1.11
+ version: 3.1.11
typescript:
specifier: 5.9.3
version: 5.9.3
packages:
+ '@acemir/cssom@0.9.23':
+ resolution: {integrity: sha512-2kJ1HxBKzPLbmhZpxBiTZggjtgCwKg1ma5RHShxvd6zgqhDEdEkzpiwe7jLkI2p2BrZvFCXIihdoMkl1H39VnA==}
+
'@adobe/css-tools@4.4.4':
resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==}
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
'@analytics/cookie-utils@0.2.14':
resolution: {integrity: sha512-x51x2cLqvP5Fb1ydgNvTCX+SVv0ALK/yTNwp/53++yk4kLhxb850krWtQ4aASN0612oXrIGotwfmdJIttnLiPQ==}
@@ -1596,8 +1638,14 @@ packages:
'@apm-js-collab/tracing-hooks@0.3.1':
resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==}
- '@asamuzakjp/css-color@2.8.3':
- resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==}
+ '@asamuzakjp/css-color@4.0.5':
+ resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==}
+
+ '@asamuzakjp/dom-selector@6.7.4':
+ resolution: {integrity: sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==}
+
+ '@asamuzakjp/nwsapi@2.3.9':
+ resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
'@aws-crypto/crc32@5.2.0':
resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
@@ -1622,208 +1670,137 @@ packages:
'@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
- '@aws-sdk/client-s3@3.908.0':
- resolution: {integrity: sha512-c/89iG3of8UEiWbRK014DoHLy8PLLTJtM9IvYLPsvrf83kpV2P/K9WrdbjW4h6e5qt9XPgfNTZ8U607mt7pdmA==}
+ '@aws-sdk/client-s3@3.937.0':
+ resolution: {integrity: sha512-ioeNe6HSc7PxjsUQY7foSHmgesxM5KwAeUtPhIHgKx99nrM+7xYCfW4FMvHypUzz7ZOvqlCdH7CEAZ8ParBvVg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/client-ses@3.873.0':
- resolution: {integrity: sha512-m133jrCWPtMLSRYadK5gc6B4HqSP9EKZjCyq+sTlerN0vUBI/Uf5eA+6ZG3/04lIA7nOje+wCB8dTSZmiId55w==}
+ '@aws-sdk/client-sesv2@3.938.0':
+ resolution: {integrity: sha512-GW07FQuZkW5ASm0WP+CWLetcortqup9l3+p1OlvuUN3rLBIzlWRqYd5Nf2GTS72sPbaNowE3dYJXCtwu1IlLuQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/client-sso@3.873.0':
- resolution: {integrity: sha512-EmcrOgFODWe7IsLKFTeSXM9TlQ80/BO1MBISlr7w2ydnOaUYIiPGRRJnDpeIgMaNqT4Rr2cRN2RiMrbFO7gDdA==}
+ '@aws-sdk/client-sso@3.936.0':
+ resolution: {integrity: sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/client-sso@3.908.0':
- resolution: {integrity: sha512-PseFMWvtac+Q+zaY9DMISE+2+glNh0ROJ1yR4gMzeafNHSwkdYu4qcgxLWIOnIodGydBv/tQ6nzHPzExXnUUgw==}
+ '@aws-sdk/core@3.936.0':
+ resolution: {integrity: sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/core@3.873.0':
- resolution: {integrity: sha512-WrROjp8X1VvmnZ4TBzwM7RF+EB3wRaY9kQJLXw+Aes0/3zRjUXvGIlseobGJMqMEGnM0YekD2F87UaVfot1xeQ==}
+ '@aws-sdk/credential-provider-env@3.936.0':
+ resolution: {integrity: sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/core@3.908.0':
- resolution: {integrity: sha512-okl6FC2cQT1Oidvmnmvyp/IEvqENBagKO0ww4YV5UtBkf0VlhAymCWkZqhovtklsqgq0otag2VRPAgnrMt6nVQ==}
+ '@aws-sdk/credential-provider-http@3.936.0':
+ resolution: {integrity: sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-env@3.873.0':
- resolution: {integrity: sha512-FWj1yUs45VjCADv80JlGshAttUHBL2xtTAbJcAxkkJZzLRKVkdyrepFWhv/95MvDyzfbT6PgJiWMdW65l/8ooA==}
+ '@aws-sdk/credential-provider-ini@3.936.0':
+ resolution: {integrity: sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-env@3.908.0':
- resolution: {integrity: sha512-FK2YuxoI5CxUflPOIMbVAwDbi6Xvu+2sXopXLmrHc2PfI39M3vmjEoQwYCP8WuQSRb+TbAP3xAkxHjFSBFR35w==}
+ '@aws-sdk/credential-provider-login@3.936.0':
+ resolution: {integrity: sha512-8DVrdRqPyUU66gfV7VZNToh56ZuO5D6agWrkLQE/xbLJOm2RbeRgh6buz7CqV8ipRd6m+zCl9mM4F3osQLZn8Q==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-http@3.873.0':
- resolution: {integrity: sha512-0sIokBlXIsndjZFUfr3Xui8W6kPC4DAeBGAXxGi9qbFZ9PWJjn1vt2COLikKH3q2snchk+AsznREZG8NW6ezSg==}
+ '@aws-sdk/credential-provider-node@3.936.0':
+ resolution: {integrity: sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-http@3.908.0':
- resolution: {integrity: sha512-eLbz0geVW9EykujQNnYfR35Of8MreI6pau5K6XDFDUSWO9GF8wqH7CQwbXpXHBlCTHtq4QSLxzorD8U5CROhUw==}
+ '@aws-sdk/credential-provider-process@3.936.0':
+ resolution: {integrity: sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-ini@3.873.0':
- resolution: {integrity: sha512-bQdGqh47Sk0+2S3C+N46aNQsZFzcHs7ndxYLARH/avYXf02Nl68p194eYFaAHJSQ1re5IbExU1+pbums7FJ9fA==}
+ '@aws-sdk/credential-provider-sso@3.936.0':
+ resolution: {integrity: sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-ini@3.908.0':
- resolution: {integrity: sha512-7Cgnv5wabgFtsgr+Uc/76EfPNGyxmbG8aICn3g3D3iJlcO4uuOZI8a77i0afoDdchZrTC6TG6UusS/NAW6zEoQ==}
+ '@aws-sdk/credential-provider-web-identity@3.936.0':
+ resolution: {integrity: sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-node@3.873.0':
- resolution: {integrity: sha512-+v/xBEB02k2ExnSDL8+1gD6UizY4Q/HaIJkNSkitFynRiiTQpVOSkCkA0iWxzksMeN8k1IHTE5gzeWpkEjNwbA==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-node@3.908.0':
- resolution: {integrity: sha512-8OKbykpGw5bdfF/pLTf8YfUi1Kl8o1CTjBqWQTsLOkE3Ho3hsp1eQx8Cz4ttrpv0919kb+lox62DgmAOEmTr1w==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-process@3.873.0':
- resolution: {integrity: sha512-ycFv9WN+UJF7bK/ElBq1ugWA4NMbYS//1K55bPQZb2XUpAM2TWFlEjG7DIyOhLNTdl6+CbHlCdhlKQuDGgmm0A==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-process@3.908.0':
- resolution: {integrity: sha512-sWnbkGjDPBi6sODUzrAh5BCDpnPw0wpK8UC/hWI13Q8KGfyatAmCBfr+9OeO3+xBHa8N5AskMncr7C4qS846yQ==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-sso@3.873.0':
- resolution: {integrity: sha512-SudkAOZmjEEYgUrqlUUjvrtbWJeI54/0Xo87KRxm4kfBtMqSx0TxbplNUAk8Gkg4XQNY0o7jpG8tK7r2Wc2+uw==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-sso@3.908.0':
- resolution: {integrity: sha512-WV/aOzuS6ZZhrkPty6TJ3ZG24iS8NXP0m3GuTVuZ5tKi9Guss31/PJ1CrKPRCYGm15CsIjf+mrUxVnNYv9ap5g==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-web-identity@3.873.0':
- resolution: {integrity: sha512-Gw2H21+VkA6AgwKkBtTtlGZ45qgyRZPSKWs0kUwXVlmGOiPz61t/lBX0vG6I06ZIz2wqeTJ5OA1pWZLqw1j0JQ==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/credential-provider-web-identity@3.908.0':
- resolution: {integrity: sha512-9xWrFn6nWlF5KlV4XYW+7E6F33S3wUUEGRZ/+pgDhkIZd527ycT2nPG2dZ3fWUZMlRmzijP20QIJDqEbbGWe1Q==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/lib-storage@3.908.0':
- resolution: {integrity: sha512-tWYvGPAImOHSGYyau5rrVQA3OS0MV8ZCgf5ywtRIAmMEV4CSctDBP8WR2FrO7shAPKMRkjgdul5f0pZAjOYd2Q==}
+ '@aws-sdk/lib-storage@3.937.0':
+ resolution: {integrity: sha512-G+AxZX14MaVUT93BGeG17yBC+rR5yOOvE0QLpSViSARjPLI7el1zEEpOzC18OKIchFoM81VfC0xavfNMIp/bfw==}
engines: {node: '>=18.0.0'}
peerDependencies:
- '@aws-sdk/client-s3': ^3.908.0
+ '@aws-sdk/client-s3': ^3.937.0
- '@aws-sdk/middleware-bucket-endpoint@3.901.0':
- resolution: {integrity: sha512-mPF3N6eZlVs9G8aBSzvtoxR1RZqMo1aIwR+X8BAZSkhfj55fVF2no4IfPXfdFO3I66N+zEQ8nKoB0uTATWrogQ==}
+ '@aws-sdk/middleware-bucket-endpoint@3.936.0':
+ resolution: {integrity: sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-expect-continue@3.901.0':
- resolution: {integrity: sha512-bwq9nj6MH38hlJwOY9QXIDwa6lI48UsaZpaXbdD71BljEIRlxDzfB4JaYb+ZNNK7RIAdzsP/K05mJty6KJAQHw==}
+ '@aws-sdk/middleware-expect-continue@3.936.0':
+ resolution: {integrity: sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-flexible-checksums@3.908.0':
- resolution: {integrity: sha512-hYGhNBvdfnxhhywYRkesdxIZD8rvhsp2CBci5kCqrR2o5VvEkn5+waUQtkREtkciEpC4ent4fadg7N9XfTKvgQ==}
+ '@aws-sdk/middleware-flexible-checksums@3.936.0':
+ resolution: {integrity: sha512-l3GG6CrSQtMCM6fWY7foV3JQv0WJWT+3G6PSP3Ceb/KEE/5Lz5PrYFXTBf+bVoYL1b0bGjGajcgAXpstBmtHtQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-host-header@3.873.0':
- resolution: {integrity: sha512-KZ/W1uruWtMOs7D5j3KquOxzCnV79KQW9MjJFZM/M0l6KI8J6V3718MXxFHsTjUE4fpdV6SeCNLV1lwGygsjJA==}
+ '@aws-sdk/middleware-host-header@3.936.0':
+ resolution: {integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-host-header@3.901.0':
- resolution: {integrity: sha512-yWX7GvRmqBtbNnUW7qbre3GvZmyYwU0WHefpZzDTYDoNgatuYq6LgUIQ+z5C04/kCRoFkAFrHag8a3BXqFzq5A==}
+ '@aws-sdk/middleware-location-constraint@3.936.0':
+ resolution: {integrity: sha512-SCMPenDtQMd9o5da9JzkHz838w3327iqXk3cbNnXWqnNRx6unyW8FL0DZ84gIY12kAyVHz5WEqlWuekc15ehfw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-location-constraint@3.901.0':
- resolution: {integrity: sha512-MuCS5R2ngNoYifkVt05CTULvYVWX0dvRT0/Md4jE3a0u0yMygYy31C1zorwfE/SUgAQXyLmUx8ATmPp9PppImQ==}
+ '@aws-sdk/middleware-logger@3.936.0':
+ resolution: {integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-logger@3.873.0':
- resolution: {integrity: sha512-QhNZ8X7pW68kFez9QxUSN65Um0Feo18ZmHxszQZNUhKDsXew/EG9NPQE/HgYcekcon35zHxC4xs+FeNuPurP2g==}
+ '@aws-sdk/middleware-recursion-detection@3.936.0':
+ resolution: {integrity: sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-logger@3.901.0':
- resolution: {integrity: sha512-UoHebjE7el/tfRo8/CQTj91oNUm+5Heus5/a4ECdmWaSCHCS/hXTsU3PTTHAY67oAQR8wBLFPfp3mMvXjB+L2A==}
+ '@aws-sdk/middleware-sdk-s3@3.936.0':
+ resolution: {integrity: sha512-UQs/pVq4cOygsnKON0pOdSKIWkfgY0dzq4h+fR+xHi/Ng3XzxPJhWeAE6tDsKrcyQc1X8UdSbS70XkfGYr5hng==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-recursion-detection@3.873.0':
- resolution: {integrity: sha512-OtgY8EXOzRdEWR//WfPkA/fXl0+WwE8hq0y9iw2caNyKPtca85dzrrZWnPqyBK/cpImosrpR1iKMYr41XshsCg==}
+ '@aws-sdk/middleware-ssec@3.936.0':
+ resolution: {integrity: sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-recursion-detection@3.901.0':
- resolution: {integrity: sha512-Wd2t8qa/4OL0v/oDpCHHYkgsXJr8/ttCxrvCKAt0H1zZe2LlRhY9gpDVKqdertfHrHDj786fOvEQA28G1L75Dg==}
+ '@aws-sdk/middleware-user-agent@3.936.0':
+ resolution: {integrity: sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-sdk-s3@3.908.0':
- resolution: {integrity: sha512-23MbAOHsGaD0kTVMVLumaIM1f9vtDImIn2lSvPullbjFHKS4XxfrKuPumtKDzl8gzcux+98XnmfDRKH0fzkOUA==}
+ '@aws-sdk/nested-clients@3.936.0':
+ resolution: {integrity: sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-ssec@3.901.0':
- resolution: {integrity: sha512-YiLLJmA3RvjL38mFLuu8fhTTGWtp2qT24VqpucgfoyziYcTgIQkJJmKi90Xp6R6/3VcArqilyRgM1+x8i/em+Q==}
+ '@aws-sdk/region-config-resolver@3.936.0':
+ resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-user-agent@3.873.0':
- resolution: {integrity: sha512-gHqAMYpWkPhZLwqB3Yj83JKdL2Vsb64sryo8LN2UdpElpS+0fT4yjqSxKTfp7gkhN6TCIxF24HQgbPk5FMYJWw==}
+ '@aws-sdk/signature-v4-multi-region@3.936.0':
+ resolution: {integrity: sha512-8qS0GFUqkmwO7JZ0P8tdluBmt1UTfYUah8qJXGzNh9n1Pcb0AIeT117cCSiCUtwk+gDbJvd4hhRIhJCNr5wgjg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-user-agent@3.908.0':
- resolution: {integrity: sha512-R0ePEOku72EvyJWy/D0Z5f/Ifpfxa0U9gySO3stpNhOox87XhsILpcIsCHPy0OHz1a7cMoZsF6rMKSzDeCnogQ==}
+ '@aws-sdk/token-providers@3.936.0':
+ resolution: {integrity: sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/nested-clients@3.873.0':
- resolution: {integrity: sha512-yg8JkRHuH/xO65rtmLOWcd9XQhxX1kAonp2CliXT44eA/23OBds6XoheY44eZeHfCTgutDLTYitvy3k9fQY6ZA==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/nested-clients@3.908.0':
- resolution: {integrity: sha512-ZxDYrfxOKXNFHLyvJtT96TJ0p4brZOhwRE4csRXrezEVUN+pNgxuem95YvMALPVhlVqON2CTzr8BX+CcBKvX9Q==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/region-config-resolver@3.873.0':
- resolution: {integrity: sha512-q9sPoef+BBG6PJnc4x60vK/bfVwvRWsPgcoQyIra057S/QGjq5VkjvNk6H8xedf6vnKlXNBwq9BaANBXnldUJg==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/region-config-resolver@3.901.0':
- resolution: {integrity: sha512-7F0N888qVLHo4CSQOsnkZ4QAp8uHLKJ4v3u09Ly5k4AEStrSlFpckTPyUx6elwGL+fxGjNE2aakK8vEgzzCV0A==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/signature-v4-multi-region@3.908.0':
- resolution: {integrity: sha512-8OodflIzZM2GVuCGiGK6hqwsbfHRDl4kQcEYzHRg9p91H4h5Y876DPvLRkwM7pSC7LKUL0XkKWWVVjwJbp6/Ig==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/token-providers@3.873.0':
- resolution: {integrity: sha512-BWOCeFeV/Ba8fVhtwUw/0Hz4wMm9fjXnMb4Z2a5he/jFlz5mt1/rr6IQ4MyKgzOaz24YrvqsJW2a0VUKOaYDvg==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/token-providers@3.908.0':
- resolution: {integrity: sha512-4SosHWRQ8hj1X2yDenCYHParcCjHcd7S+Mdb/lelwF0JBFCNC+dNCI9ws3cP/dFdZO/AIhJQGUBzEQtieloixw==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/types@3.862.0':
- resolution: {integrity: sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/types@3.901.0':
- resolution: {integrity: sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg==}
+ '@aws-sdk/types@3.936.0':
+ resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==}
engines: {node: '>=18.0.0'}
'@aws-sdk/util-arn-parser@3.893.0':
resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-endpoints@3.873.0':
- resolution: {integrity: sha512-YByHrhjxYdjKRf/RQygRK1uh0As1FIi9+jXTcIEX/rBgN8mUByczr2u4QXBzw7ZdbdcOBMOkPnLRjNOWW1MkFg==}
+ '@aws-sdk/util-endpoints@3.936.0':
+ resolution: {integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-endpoints@3.901.0':
- resolution: {integrity: sha512-5nZP3hGA8FHEtKvEQf4Aww5QZOkjLW1Z+NixSd+0XKfHvA39Ah5sZboScjLx0C9kti/K3OGW1RCx5K9Zc3bZqg==}
+ '@aws-sdk/util-locate-window@3.893.0':
+ resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-locate-window@3.208.0':
- resolution: {integrity: sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==}
- engines: {node: '>=14.0.0'}
+ '@aws-sdk/util-user-agent-browser@3.936.0':
+ resolution: {integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==}
- '@aws-sdk/util-user-agent-browser@3.873.0':
- resolution: {integrity: sha512-AcRdbK6o19yehEcywI43blIBhOCSo6UgyWcuOJX5CFF8k39xm1ILCjQlRRjchLAxWrm0lU0Q7XV90RiMMFMZtA==}
-
- '@aws-sdk/util-user-agent-browser@3.907.0':
- resolution: {integrity: sha512-Hus/2YCQmtCEfr4Ls88d07Q99Ex59uvtktiPTV963Q7w7LHuIT/JBjrbwNxtSm2KlJR9PHNdqxwN+fSuNsMGMQ==}
-
- '@aws-sdk/util-user-agent-node@3.873.0':
- resolution: {integrity: sha512-9MivTP+q9Sis71UxuBaIY3h5jxH0vN3/ZWGxO8ADL19S2OIfknrYSAfzE5fpoKROVBu0bS4VifHOFq4PY1zsxw==}
+ '@aws-sdk/util-user-agent-node@3.936.0':
+ resolution: {integrity: sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==}
engines: {node: '>=18.0.0'}
peerDependencies:
aws-crt: '>=1.0.0'
@@ -1831,41 +1808,28 @@ packages:
aws-crt:
optional: true
- '@aws-sdk/util-user-agent-node@3.908.0':
- resolution: {integrity: sha512-l6AEaKUAYarcEy8T8NZ+dNZ00VGLs3fW2Cqu1AuPENaSad0/ahEU+VU7MpXS8FhMRGPgplxKVgCTLyTY0Lbssw==}
- engines: {node: '>=18.0.0'}
- peerDependencies:
- aws-crt: '>=1.0.0'
- peerDependenciesMeta:
- aws-crt:
- optional: true
-
- '@aws-sdk/xml-builder@3.873.0':
- resolution: {integrity: sha512-kLO7k7cGJ6KaHiExSJWojZurF7SnGMDHXRuQunFnEoD0n1yB6Lqy/S/zHiQ7oJnBhPr9q0TW9qFkrsZb1Uc54w==}
+ '@aws-sdk/xml-builder@3.930.0':
+ resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/xml-builder@3.901.0':
- resolution: {integrity: sha512-pxFCkuAP7Q94wMTNPAwi6hEtNrp/BdFf+HOrIEeFQsk4EoOmpKY3I6S+u6A9Wg295J80Kh74LqDWM22ux3z6Aw==}
- engines: {node: '>=18.0.0'}
-
- '@aws/lambda-invoke-store@0.0.1':
- resolution: {integrity: sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==}
+ '@aws/lambda-invoke-store@0.2.0':
+ resolution: {integrity: sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ==}
engines: {node: '>=18.0.0'}
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.28.4':
- resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
+ '@babel/compat-data@7.28.5':
+ resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.28.4':
- resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
+ '@babel/core@7.28.5':
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.28.3':
- resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.27.2':
@@ -1890,8 +1854,8 @@ packages:
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.27.1':
@@ -1902,15 +1866,11 @@ packages:
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/runtime@7.27.0':
- resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
- engines: {node: '>=6.9.0'}
-
'@babel/runtime@7.28.4':
resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
engines: {node: '>=6.9.0'}
@@ -1919,83 +1879,90 @@ packages:
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.28.4':
- resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@1.0.2':
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
- '@canvas/image-data@1.0.0':
- resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==}
+ '@borewit/text-codec@0.1.1':
+ resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==}
+
+ '@canvas/image-data@1.1.0':
+ resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==}
'@chainsafe/is-ip@2.1.0':
resolution: {integrity: sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==}
- '@cropper/element-canvas@2.0.1':
- resolution: {integrity: sha512-OKxq/O0HL9W2JegOsc2zh1NRpERZcLM5+M8aQ/eXdmMcfi1lzosPftag3Irp6pTsVpwV6B6ypIxKESzJ4ci9Fw==}
+ '@cropper/element-canvas@2.1.0':
+ resolution: {integrity: sha512-el+rfJpZxsD2q5XxDBA4fRczcrOqB65Lb7roqXOq8LKufwf4bPWA9C6DjNJJahh/TP94dsLIEy3tSkgRMDv3Aw==}
- '@cropper/element-crosshair@2.0.1':
- resolution: {integrity: sha512-bS5msU9cTU/jf1/kDw+QJmEM9/rw8IgOdpolR85iMVUCR8sRcLa0wgom42MBHcpBYB6hvL5YfiOeXZ7lHIYMpw==}
+ '@cropper/element-crosshair@2.1.0':
+ resolution: {integrity: sha512-0V589dAx8uZAfvJwdINLn76gfPQEafPH94ukjJ76uX0FCUovLaAVX+VRD/MDSYn0Mza/xejzmL9Dhd1DfemvmA==}
- '@cropper/element-grid@2.0.1':
- resolution: {integrity: sha512-ayqCvYQJ+GVT31HhFpttzHabW1T/LsIwLJY5PLTMG0cEZLw/E8ihg8mxctjZbo852D7oEePbz6/2SeuCb1018Q==}
+ '@cropper/element-grid@2.1.0':
+ resolution: {integrity: sha512-dEnk0rO+vp553LMvsPYgfrqVFcYXeVFrgFeavBYYEhAXtO40p7kN4rmLYLMMjaN+T/Mx2BATv6kUQpALKy2HLw==}
- '@cropper/element-handle@2.0.1':
- resolution: {integrity: sha512-fdifyyPIaR9S2eQ7qPHuM8fX8uToAfBsi8vQlR9EM+oJkDNil0uO4rWyArLWEtlr0/q7U0OvsufcuJ7ffqfmpg==}
+ '@cropper/element-handle@2.1.0':
+ resolution: {integrity: sha512-8BklWA4C/2GGAULupIWleSnGutECvYt3vx9flodqDfZpDEozws4LgLqmmzVuQmVkRVUdLnXdtx28kjgWLtzkHg==}
- '@cropper/element-image@2.0.1':
- resolution: {integrity: sha512-gPj5Sl2T8Cno198Cz3F3TDfcYoALW3yJ3fV6PHXmhMnX8sBkL7J441do7Vwkg0mEd2CogCtTLAf+p7ljdV0kgA==}
+ '@cropper/element-image@2.1.0':
+ resolution: {integrity: sha512-mXOV8ixJvG0XtTxLebYAKDjEkFbFOQnsF02hXPZk1yQSV0J+LLhN7a2NePrtKnoTsEV19fhhX3UorMoyGGxvzg==}
- '@cropper/element-selection@2.0.1':
- resolution: {integrity: sha512-atv+Aeq2N2eWawelIRPGh1kYFdNrpb0QkUPPheGxz1ImfxpLdcHO9gb9T5noQijizUW2G0pNvts4ZaITQ0I71Q==}
+ '@cropper/element-selection@2.1.0':
+ resolution: {integrity: sha512-mtFtBl6HIa/s9TWohXw+Z5eJoeYTqylrIcHvS7oVv0uM7IyeRwBW65Q7z+KtLfq/LW+2Sw/XDyvR+VN/DawBPw==}
- '@cropper/element-shade@2.0.1':
- resolution: {integrity: sha512-YIYgJ690NdFQ6wJLRFh/EySNVxGFKArncQ4FrsJ3yHU+ShgtOKz4FpjFLpqJRJB9swoVbD3WKTimGyzXrwjZrQ==}
+ '@cropper/element-shade@2.1.0':
+ resolution: {integrity: sha512-zMdyqbb0lc0Vd1oj2Z1miIZvhyZG41OXMHvrNt0hNwblh0dVdrvtw48lnFDgRv+672vt2CNx7Q04GuvCQfPlgg==}
- '@cropper/element-viewer@2.0.1':
- resolution: {integrity: sha512-HDj25l08pWi/AO6El/OqfQHBpBC4Lh5NEnQN1SOldsmxEwt27Ubv6ndDsF8LkTK7XPwjjZRpyQPyfig4w8L2JQ==}
+ '@cropper/element-viewer@2.1.0':
+ resolution: {integrity: sha512-XnxlQuqHitd1FOFZ6E0yXAF5NYd/LyIvONLLHI9p1rJw747WYKUPxQaSYtFKF7IOizJu/8mMj++Zc1dZ5ZP3YQ==}
- '@cropper/element@2.0.1':
- resolution: {integrity: sha512-Jn1hR7XWzWQM/QfXRGMGzdkJ2gG/UcLdQPZQ7OKs0JiFfRzKpzu4u/nYrXHeH3MM2iOslLqh2kqYju6mjZLMJQ==}
+ '@cropper/element@2.1.0':
+ resolution: {integrity: sha512-2zELddqHQNmlvkPoiYzE5nxEjPE+C8nXoTPuvV3FvLp3YjBinc7qb73Icg9UXP0o9qC4+h9q96JgGo0AyMO/Ng==}
- '@cropper/elements@2.0.1':
- resolution: {integrity: sha512-paFbBLXTKXNngn1yDi2ZIf+FO1pIEQXyBntmqOjuxqtG73KuEKv633wsJPFpj958bgcfSakgBbF80j+3nHbPug==}
+ '@cropper/elements@2.1.0':
+ resolution: {integrity: sha512-qvzlYDn3VQgPPpsCu6Gi1XUO0v3vpXQFSjjxcVijbXeNsl/eiKrN7H9/CEiRgi5vr8kXfd7ZvgYxBjUBbH+y+w==}
- '@cropper/utils@2.0.1':
- resolution: {integrity: sha512-A9RnAFmgNF5aZk5q2VZnFnHtXWu1kPyEN0LVsX8wJ2LBRu2nyETKwz+ZXVsVWliktToCaYojHKrS+6/HODyEZA==}
+ '@cropper/utils@2.1.0':
+ resolution: {integrity: sha512-wLtpZ4/UWgo+fGmG8NBWge8x5ehjfDe9ovleDfLy8kpwFaw43XXOEXQtRL1UNr0u4JZxaeO8FcXcolRWUUrlRQ==}
- '@csstools/color-helpers@5.0.1':
- resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==}
+ '@csstools/color-helpers@5.1.0':
+ resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
engines: {node: '>=18'}
- '@csstools/css-calc@2.1.1':
- resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==}
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-color-parser@3.0.7':
- resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==}
+ '@csstools/css-color-parser@3.1.0':
+ resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-parser-algorithms@3.0.4':
- resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-tokenizer@3.0.3':
- resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
+ '@csstools/css-syntax-patches-for-csstree@1.0.16':
+ resolution: {integrity: sha512-2SpS4/UaWQaGpBINyG5ZuCHnUDeVByOhvbkARwfmnfxDvTaj80yOI1cD8Tw93ICV5Fx4fnyDKWQZI1CDtcWyUg==}
+ engines: {node: '>=18'}
+
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
'@cypress/request@3.0.9':
@@ -2005,171 +1972,327 @@ packages:
'@cypress/xvfb@1.2.4':
resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==}
- '@digitalbazaar/http-client@3.4.1':
- resolution: {integrity: sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==}
- engines: {node: '>=14.0'}
+ '@digitalbazaar/http-client@4.2.0':
+ resolution: {integrity: sha512-OGju/GYp0V72qlZ/Pd4jGEwqBwT/Za/tw+Z3AC7lgMheGqsbhTZrtc5iLz9z59G/Q53QyE2fnjHV8N9wjBpiWA==}
+ engines: {node: '>=18.0'}
'@discordapp/twemoji@16.0.1':
resolution: {integrity: sha512-figLiBWzjS5cyrAjLaGjM8AAaowO3qvK8rg5bA2dElB4qsaPMvBVlFDMO2d3x+nC1igt7kgWH4dvNmvvUHUF8w==}
- '@emnapi/runtime@1.4.3':
- resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
+ '@emnapi/runtime@1.7.1':
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
'@epic-web/invariant@1.0.0':
resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==}
- '@esbuild/aix-ppc64@0.25.10':
- resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
+ '@esbuild/aix-ppc64@0.25.11':
+ resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.10':
- resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
+ '@esbuild/aix-ppc64@0.27.0':
+ resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.11':
+ resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.10':
- resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
+ '@esbuild/android-arm64@0.27.0':
+ resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.11':
+ resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.10':
- resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
+ '@esbuild/android-arm@0.27.0':
+ resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.11':
+ resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.10':
- resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
+ '@esbuild/android-x64@0.27.0':
+ resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.11':
+ resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.10':
- resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
+ '@esbuild/darwin-arm64@0.27.0':
+ resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.11':
+ resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.10':
- resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
+ '@esbuild/darwin-x64@0.27.0':
+ resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.25.11':
+ resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.10':
- resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
+ '@esbuild/freebsd-arm64@0.27.0':
+ resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.11':
+ resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.10':
- resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
+ '@esbuild/freebsd-x64@0.27.0':
+ resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.11':
+ resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.10':
- resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
+ '@esbuild/linux-arm64@0.27.0':
+ resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.11':
+ resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.10':
- resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
+ '@esbuild/linux-arm@0.27.0':
+ resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.11':
+ resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.10':
- resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
+ '@esbuild/linux-ia32@0.27.0':
+ resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.11':
+ resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.10':
- resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
+ '@esbuild/linux-loong64@0.27.0':
+ resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.11':
+ resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.10':
- resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
+ '@esbuild/linux-mips64el@0.27.0':
+ resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.11':
+ resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.10':
- resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
+ '@esbuild/linux-ppc64@0.27.0':
+ resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.11':
+ resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.10':
- resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
+ '@esbuild/linux-riscv64@0.27.0':
+ resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.11':
+ resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.10':
- resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
+ '@esbuild/linux-s390x@0.27.0':
+ resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.11':
+ resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.10':
- resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
+ '@esbuild/linux-x64@0.27.0':
+ resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.11':
+ resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.10':
- resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
+ '@esbuild/netbsd-arm64@0.27.0':
+ resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.11':
+ resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.10':
- resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
+ '@esbuild/netbsd-x64@0.27.0':
+ resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.11':
+ resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.10':
- resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
+ '@esbuild/openbsd-arm64@0.27.0':
+ resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.11':
+ resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.10':
- resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
+ '@esbuild/openbsd-x64@0.27.0':
+ resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.11':
+ resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.10':
- resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
+ '@esbuild/openharmony-arm64@0.27.0':
+ resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.11':
+ resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.10':
- resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
+ '@esbuild/sunos-x64@0.27.0':
+ resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.11':
+ resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.10':
- resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
+ '@esbuild/win32-arm64@0.27.0':
+ resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.11':
+ resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.10':
- resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
+ '@esbuild/win32-ia32@0.27.0':
+ resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.11':
+ resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.0':
+ resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -2180,102 +2303,107 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/regexpp@4.12.1':
- resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@1.1.1':
- resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==}
+ '@eslint/compat@1.4.0':
+ resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.40 || 9
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+
+ '@eslint/config-array@0.21.1':
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-array@0.21.0':
- resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/config-helpers@0.4.0':
- resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==}
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.16.0':
resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.37.0':
- resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==}
+ '@eslint/js@9.39.1':
+ resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/object-schema@2.1.6':
- resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.4.0':
- resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@fastify/accept-negotiator@2.0.0':
- resolution: {integrity: sha512-/Sce/kBzuTxIq5tJh85nVNOq9wKD8s+viIgX0fFMDBdw95gnpf53qmF1oBgJym3cPFliWUuSloVg/1w/rH0FcQ==}
+ '@fastify/accept-negotiator@2.0.1':
+ resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==}
'@fastify/accepts@5.0.3':
resolution: {integrity: sha512-JQE0PVW7V5aIvWNQvBvlz3K92Q4OnDcC8ERcJnFd9a11/IVi/eV6SCutOUh9K2CAeQUMkJJyRog3Gltn7uAF6g==}
- '@fastify/ajv-compiler@4.0.0':
- resolution: {integrity: sha512-dt0jyLAlay14LpIn4Fg1SY7V5NJ9KH0YFDpYVQY5cgIVBvdI8908AMx5zQ0bBYPGT6Wh+bM3f2caMmOXLP3QsQ==}
+ '@fastify/ajv-compiler@4.0.5':
+ resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
- '@fastify/busboy@2.1.0':
- resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==}
- engines: {node: '>=14'}
-
- '@fastify/busboy@3.0.0':
- resolution: {integrity: sha512-83rnH2nCvclWaPQQKvkJ2pdOjG4TZyEVuFDnlOF6KP08lDaaceVyw/W63mDuafQT+MKHCvXIPpE5uYWeM0rT4w==}
+ '@fastify/busboy@3.2.0':
+ resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
'@fastify/cookie@11.0.2':
resolution: {integrity: sha512-GWdwdGlgJxyvNv+QcKiGNevSspMQXncjMZ1J8IvuDQk0jvkzgWWZFNC2En3s+nHndZBGV8IbLwOI/sxCZw/mzA==}
- '@fastify/cors@10.1.0':
- resolution: {integrity: sha512-MZyBCBJtII60CU9Xme/iE4aEy8G7QpzGR8zkdXZkDFt7ElEMachbE61tfhAG/bvSaULlqlf0huMT12T7iqEmdQ==}
+ '@fastify/cors@11.1.0':
+ resolution: {integrity: sha512-sUw8ed8wP2SouWZTIbA7V2OQtMNpLj2W6qJOYhNdcmINTu6gsxVYXjQiM9mdi8UUDlcoDDJ/W2syPo1WB2QjYA==}
'@fastify/deepmerge@3.1.0':
resolution: {integrity: sha512-lCVONBQINyNhM6LLezB6+2afusgEYR4G8xenMsfe+AT+iZ7Ca6upM5Ha8UkZuYSnuMw3GWl/BiPXnLMi/gSxuQ==}
- '@fastify/error@4.0.0':
- resolution: {integrity: sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==}
+ '@fastify/error@4.2.0':
+ resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
'@fastify/express@4.0.2':
resolution: {integrity: sha512-lzu9MLdjlsK4Q2RiqEAwTgwQPrWQVP0kmbgAi/w9rIUqtnacjKvj3EHVTR6PIvXDs6Ut1jnTHiGbuNxHTsZwHQ==}
- '@fastify/fast-json-stringify-compiler@5.0.0':
- resolution: {integrity: sha512-tywfuZfXsyxLC5kEqrMubbFa9vpAxNtuPE7j9w5si1r+6p5b981pDfZ5Y8HBqmjDQl+PABT7cV5jZgXI2j+I5g==}
+ '@fastify/fast-json-stringify-compiler@5.0.3':
+ resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
- '@fastify/forwarded@3.0.0':
- resolution: {integrity: sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==}
+ '@fastify/forwarded@3.0.1':
+ resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
- '@fastify/http-proxy@10.0.2':
- resolution: {integrity: sha512-3IlTjOu9xtX5UPd/ZxY3ebYb6caINuBlr7iyVxYmh3zZLV0K5ted8yfU9UCNXVNs33RwbXD2RhDucc3z5BNgEA==}
+ '@fastify/http-proxy@11.3.0':
+ resolution: {integrity: sha512-FXFxkdTlXqVI11fqlxmHqOPzIo0elBA60o3bfdh2seD44KWOBBzelzCVgs1OelrxuADCyWUQp2ZxA2wp3mqQMg==}
- '@fastify/merge-json-schemas@0.1.1':
- resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==}
+ '@fastify/merge-json-schemas@0.2.1':
+ resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
- '@fastify/multipart@9.2.1':
- resolution: {integrity: sha512-U4221XDMfzCUtfzsyV1/PkR4MNgKI0158vUUyn/oF2Tl6RxMc+N7XYLr5fZXQiEC+Fmw5zFaTjxsTGTgtDtK+g==}
+ '@fastify/multipart@9.3.0':
+ resolution: {integrity: sha512-NpeKipTOjjL1dA7SSlRMrOWWtrE8/0yKOmeudkdQoEaz4sVDJw5MVdZIahsWhvpc3YTN7f04f9ep/Y65RKoOWA==}
- '@fastify/proxy-addr@5.0.0':
- resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==}
+ '@fastify/proxy-addr@5.1.0':
+ resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
- '@fastify/reply-from@11.0.0':
- resolution: {integrity: sha512-dv3o8hyy4sxhg1RN9l6ueM+PMMaIPKLjtL2T99H5M7h1Xt8d1RX3r+xC+sL5AqJqLvReX4N+7mTq9QDeB8i6Lg==}
+ '@fastify/reply-from@12.4.0':
+ resolution: {integrity: sha512-2MGQ3c/Sf3YKs6/YNwZgk7v6udDeA4AmlqeaxKHVFg/0ZPN2T1AjtU0SZ8VmIZsxZXQVOlhjR43oVydbuqm8SQ==}
- '@fastify/send@4.0.0':
- resolution: {integrity: sha512-eJjKDxyBnZ1iMHcmwYWG5wSA/yzVY/yrBy3Upd2+hc0omcK13tWeXRcbF28zEcbl+Z2kXEgMzJ5Rb/gXGWx9Rg==}
+ '@fastify/send@4.1.0':
+ resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==}
- '@fastify/static@8.2.0':
- resolution: {integrity: sha512-PejC/DtT7p1yo3p+W7LiUtLMsV8fEvxAK15sozHy9t8kwo5r0uLYmhV/inURmGz1SkHZFz/8CNtHLPyhKcx4SQ==}
+ '@fastify/static@8.3.0':
+ resolution: {integrity: sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==}
- '@fastify/view@10.0.2':
- resolution: {integrity: sha512-tGjXFyDUMj5a+E8BBrQ2wpsVnpOfMq3cqy4WD8pnjWPE/HGNItBASUPoPUcX/QjPhxfuZZTYv2XdCmKXdcMZPw==}
+ '@file-type/xml@0.4.4':
+ resolution: {integrity: sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==}
'@github/webauthn-json@2.1.1':
resolution: {integrity: sha512-XrftRn4z75SnaJOmZQbt7Mk+IIjqVHw+glDGOxuHwXkZBZh/MBoRS7MHjSZMDaLhT4RjN2VqiEU7EOYleuJWSQ==}
@@ -2304,8 +2432,8 @@ packages:
'@hapi/pinpoint@2.0.1':
resolution: {integrity: sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==}
- '@hapi/tlds@1.1.3':
- resolution: {integrity: sha512-QIvUMB5VZ8HMLZF9A2oWr3AFM430QC8oGd0L35y2jHpuW6bIIca6x/xL7zUf4J7L9WJ3qjz+iJII8ncaeMbpSg==}
+ '@hapi/tlds@1.1.4':
+ resolution: {integrity: sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==}
engines: {node: '>=14.0.0'}
'@hapi/topo@5.1.0':
@@ -2314,11 +2442,11 @@ packages:
'@hapi/topo@6.0.2':
resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==}
- '@hapi/wreck@18.0.1':
- resolution: {integrity: sha512-OLHER70+rZxvDl75xq3xXOfd3e8XIvz8fWY0dqg92UvhZ29zo24vQgfqgHSYhB5ZiuFpSLeriOisAlxAo/1jWg==}
+ '@hapi/wreck@18.1.0':
+ resolution: {integrity: sha512-0z6ZRCmFEfV/MQqkQomJ7sl/hyxvcZM7LtuVqN3vdAO4vM9eBbowl0kaqQj9EJJQab+3Uuh1GxbGIBFy4NfJ4w==}
- '@hexagon/base64@1.1.27':
- resolution: {integrity: sha512-PdUmzpvcUM3Rh39kvz9RdbPVYhMjBjdV7Suw7ZduP7urRLsZR8l5tzgSWKm7TExwBYDFwTnYrZbnE0rQ3N5NLQ==}
+ '@hexagon/base64@1.1.28':
+ resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@@ -2457,12 +2585,12 @@ packages:
cpu: [x64]
os: [win32]
- '@inquirer/ansi@1.0.0':
- resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==}
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
engines: {node: '>=18'}
- '@inquirer/confirm@5.1.18':
- resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==}
+ '@inquirer/confirm@5.1.21':
+ resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -2470,8 +2598,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/core@10.2.2':
- resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==}
+ '@inquirer/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -2479,12 +2607,12 @@ packages:
'@types/node':
optional: true
- '@inquirer/figures@1.0.13':
- resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==}
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
engines: {node: '>=18'}
- '@inquirer/type@3.0.8':
- resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==}
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -2511,10 +2639,6 @@ packages:
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'}
- '@istanbuljs/schema@0.1.3':
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
-
'@jest/schemas@29.6.3':
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -2542,8 +2666,8 @@ packages:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- '@jridgewell/source-map@0.3.6':
- resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
@@ -2554,14 +2678,25 @@ packages:
'@keyv/serialize@1.1.1':
resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
- '@kurkle/color@0.3.2':
- resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
+ '@kitajs/html@4.2.11':
+ resolution: {integrity: sha512-gOe+zzCZKN2fPT1FUK32mHsr21ILcAOUUux/yDqQthInW8egN8RuxVp+zP3KhwWETVACkurBiKV9RWuNw+ceiw==}
+ engines: {node: '>=12'}
- '@levischuck/tiny-cbor@0.2.2':
- resolution: {integrity: sha512-f5CnPw997Y2GQ8FAvtuVVC19FX8mwNNC+1XJcIi16n/LTJifKO6QBgGLgN3YEmqtGMk17SKSuoWES3imJVxAVw==}
+ '@kitajs/ts-html-plugin@4.1.3':
+ resolution: {integrity: sha512-NlYrID5yMxfRKiO1eiiSC4MWveKe0ffoCJOZm4idNOqwimmLXr0g1NmvCcquOU2XLRrgzynxZqw6rhwR5CY5Nw==}
+ hasBin: true
+ peerDependencies:
+ '@kitajs/html': ^4.2.10
+ typescript: ^5.6.2
- '@lukeed/csprng@1.0.1':
- resolution: {integrity: sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==}
+ '@kurkle/color@0.3.4':
+ resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==}
+
+ '@levischuck/tiny-cbor@0.2.11':
+ resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==}
+
+ '@lukeed/csprng@1.1.0':
+ resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
engines: {node: '>=8'}
'@lukeed/ms@2.0.2':
@@ -2578,150 +2713,264 @@ packages:
'@mcaptcha/vanilla-glue@0.1.0-alpha-3':
resolution: {integrity: sha512-GT6TJBgmViGXcXiT5VOr+h/6iOnThSlZuCoOWncubyTZU9R3cgU5vWPkF7G6Ob6ee2CBe3yqBxxk24CFVGTVXw==}
- '@mdx-js/react@3.0.1':
- resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==}
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
peerDependencies:
'@types/react': '>=16'
react: '>=16'
- '@microsoft/api-extractor-model@7.31.1':
- resolution: {integrity: sha512-Dhnip5OFKbl85rq/ICHBFGhV4RA5UQSl8AC/P/zoGvs+CBudPkatt5kIhMGiYgVPnUWmfR6fcp38+1AFLYNtUw==}
+ '@microsoft/api-extractor-model@7.32.1':
+ resolution: {integrity: sha512-u4yJytMYiUAnhcNQcZDTh/tVtlrzKlyKrQnLOV+4Qr/5gV+cpufWzCYAB1Q23URFqD6z2RoL2UYncM9xJVGNKA==}
- '@microsoft/api-extractor@7.53.1':
- resolution: {integrity: sha512-bul5eTNxijLdDBqLye74u9494sRmf+9QULtec9Od0uHnifahGeNt8CC4/xCdn7mVyEBrXIQyQ5+sc4Uc0QfBSA==}
+ '@microsoft/api-extractor@7.55.1':
+ resolution: {integrity: sha512-l8Z+8qrLkZFM3HM95Dbpqs6G39fpCa7O5p8A7AkA6hSevxkgwsOlLrEuPv0ADOyj5dI1Af5WVDiwpKG/ya5G3w==}
hasBin: true
- '@microsoft/tsdoc-config@0.17.1':
- resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==}
+ '@microsoft/tsdoc-config@0.18.0':
+ resolution: {integrity: sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==}
- '@microsoft/tsdoc@0.15.1':
- resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
+ '@microsoft/tsdoc@0.16.0':
+ resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==}
'@misskey-dev/browser-image-resizer@2024.1.0':
resolution: {integrity: sha512-4EnO0zLW5NDtng3Gaz5MuT761uiuoOuplwX18wBqgj8w56LTU5BjLn/vbHwDIIe0j2gwqDYhMb7bDjmr1/Fomg==}
- '@misskey-dev/eslint-plugin@2.1.0':
- resolution: {integrity: sha512-f++Vv1r3BQyGqEE0SB5algUZwRoTMZIYfVtpcuQ2fLuYUm0cQ5BBTs/gwAHPajVB2YD8F33gzPIReTKtuJyCwQ==}
+ '@misskey-dev/eslint-plugin@2.2.0':
+ resolution: {integrity: sha512-NlDtaFRaO2r4KRnacTiYK2Ax/z95ZvhszQ3gfZ7VWWQzPvgoQHSEBT6q94i1/HPzWrcR+l+76c3Y3T1V/yVPeg==}
peerDependencies:
'@eslint/compat': '>= 1'
- '@stylistic/eslint-plugin': '>= 2'
+ '@eslint/js': '>= 9'
+ '@stylistic/eslint-plugin': '>= 5'
'@typescript-eslint/eslint-plugin': '>= 8'
'@typescript-eslint/parser': '>= 8'
eslint: '>= 9'
eslint-plugin-import: '>= 2'
- globals: '>= 15'
+ globals: '>= 16'
'@misskey-dev/sharp-read-bmp@1.2.0':
resolution: {integrity: sha512-er4pRakXzHYfEgOFAFfQagqDouG+wLm+kwNq1I30oSdIHDa0wM3KjFpfIGQ25Fks4GcmOl1s7Zh6xoQu5dNjTw==}
- '@misskey-dev/summaly@5.2.4':
- resolution: {integrity: sha512-GDil+9w2DPsbwNYatB6cLRCPEqSY9k/f39rN8LrzUKYCrATzj5FLCFIbFvZQg55zgUnM599GJzNLka5LlFlA/g==}
+ '@misskey-dev/summaly@5.2.5':
+ resolution: {integrity: sha512-AadzhQ+FAjKdVUzcVjHh+MoOBxQOwcYiFlfKR2Y2K0Yc0NBFUs3z6J0iG1Mk2KdPjClMdsapnkFcZc50sgkgAg==}
- '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2':
- resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==}
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
cpu: [arm64]
os: [darwin]
- '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2':
- resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==}
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
cpu: [x64]
os: [darwin]
- '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2':
- resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==}
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
cpu: [arm64]
os: [linux]
- '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2':
- resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==}
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
cpu: [arm]
os: [linux]
- '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2':
- resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==}
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
cpu: [x64]
os: [linux]
- '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2':
- resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==}
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
cpu: [x64]
os: [win32]
- '@mswjs/interceptors@0.39.7':
- resolution: {integrity: sha512-sURvQbbKsq5f8INV54YJgJEdk8oxBanqkTiXXd33rKmofFCwZLhLRszPduMZ9TA9b8/1CHc/IJmOlBHJk2Q5AQ==}
+ '@mswjs/interceptors@0.40.0':
+ resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==}
engines: {node: '>=18'}
- '@napi-rs/canvas-android-arm64@0.1.80':
- resolution: {integrity: sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==}
+ '@napi-rs/canvas-android-arm64@0.1.82':
+ resolution: {integrity: sha512-bvZhN0iI54ouaQOrgJV96H2q7J3ZoufnHf4E1fUaERwW29Rz4rgicohnAg4venwBJZYjGl5Yl3CGmlAl1LZowQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
- '@napi-rs/canvas-darwin-arm64@0.1.80':
- resolution: {integrity: sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==}
+ '@napi-rs/canvas-darwin-arm64@0.1.82':
+ resolution: {integrity: sha512-InuBHKCyuFqhNwNr4gpqazo5Xp6ltKflqOLiROn4hqAS8u21xAHyYCJRgHwd+a5NKmutFTaRWeUIT/vxWbU/iw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@napi-rs/canvas-darwin-x64@0.1.80':
- resolution: {integrity: sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==}
+ '@napi-rs/canvas-darwin-x64@0.1.82':
+ resolution: {integrity: sha512-aQGV5Ynn96onSXcuvYb2y7TRXD/t4CL2EGmnGqvLyeJX1JLSNisKQlWN/1bPDDXymZYSdUqbXehj5qzBlOx+RQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@napi-rs/canvas-linux-arm-gnueabihf@0.1.80':
- resolution: {integrity: sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==}
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.82':
+ resolution: {integrity: sha512-YIUpmHWeHGGRhWitT1KJkgj/JPXPfc9ox8oUoyaGPxolLGPp5AxJkq8wIg8CdFGtutget968dtwmx71m8o3h5g==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@napi-rs/canvas-linux-arm64-gnu@0.1.80':
- resolution: {integrity: sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==}
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.82':
+ resolution: {integrity: sha512-AwLzwLBgmvk7kWeUgItOUor/QyG31xqtD26w1tLpf4yE0hiXTGp23yc669aawjB6FzgIkjh1NKaNS52B7/qEBQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@napi-rs/canvas-linux-arm64-musl@0.1.80':
- resolution: {integrity: sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==}
+ '@napi-rs/canvas-linux-arm64-musl@0.1.82':
+ resolution: {integrity: sha512-moZWuqepAwWBffdF4JDadt8TgBD02iMhG6I1FHZf8xO20AsIp9rB+p0B8Zma2h2vAF/YMjeFCDmW5un6+zZz9g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@napi-rs/canvas-linux-riscv64-gnu@0.1.80':
- resolution: {integrity: sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==}
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.82':
+ resolution: {integrity: sha512-w9++2df2kG9eC9LWYIHIlMLuhIrKGQYfUxs97CwgxYjITeFakIRazI9LYWgVzEc98QZ9x9GQvlicFsrROV59MQ==}
engines: {node: '>= 10'}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@napi-rs/canvas-linux-x64-gnu@0.1.80':
- resolution: {integrity: sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==}
+ '@napi-rs/canvas-linux-x64-gnu@0.1.82':
+ resolution: {integrity: sha512-lZulOPwrRi6hEg/17CaqdwWEUfOlIJuhXxincx1aVzsVOCmyHf+xFq4i6liJl1P+x2v6Iz2Z/H5zHvXJCC7Bwg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@napi-rs/canvas-linux-x64-musl@0.1.80':
- resolution: {integrity: sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==}
+ '@napi-rs/canvas-linux-x64-musl@0.1.82':
+ resolution: {integrity: sha512-Be9Wf5RTv1w6GXlTph55K3PH3vsAh1Ax4T1FQY1UYM0QfD0yrwGdnJ8/fhqw7dEgMjd59zIbjJQC8C3msbGn5g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@napi-rs/canvas-win32-x64-msvc@0.1.80':
- resolution: {integrity: sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==}
+ '@napi-rs/canvas-win32-x64-msvc@0.1.82':
+ resolution: {integrity: sha512-LN/i8VrvxTDmEEK1c10z2cdOTkWT76LlTGtyZe5Kr1sqoSomKeExAjbilnu1+oee5lZUgS5yfZ2LNlVhCeARuw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@napi-rs/canvas@0.1.80':
- resolution: {integrity: sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==}
+ '@napi-rs/canvas@0.1.82':
+ resolution: {integrity: sha512-FGjyUBoF0sl1EenSiE4UV2WYu76q6F9GSYedq5EiOCOyGYoQ/Owulcv6rd7v/tWOpljDDtefXXIaOCJrVKem4w==}
engines: {node: '>= 10'}
- '@nestjs/common@11.1.6':
- resolution: {integrity: sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ==}
+ '@napi-rs/nice-android-arm-eabi@1.1.1':
+ resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+
+ '@napi-rs/nice-android-arm64@1.1.1':
+ resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@napi-rs/nice-darwin-arm64@1.1.1':
+ resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@napi-rs/nice-darwin-x64@1.1.1':
+ resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@napi-rs/nice-freebsd-x64@1.1.1':
+ resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@napi-rs/nice-linux-arm-gnueabihf@1.1.1':
+ resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@napi-rs/nice-linux-arm64-gnu@1.1.1':
+ resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-arm64-musl@1.1.1':
+ resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@napi-rs/nice-linux-ppc64-gnu@1.1.1':
+ resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==}
+ engines: {node: '>= 10'}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-riscv64-gnu@1.1.1':
+ resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==}
+ engines: {node: '>= 10'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-s390x-gnu@1.1.1':
+ resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==}
+ engines: {node: '>= 10'}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-x64-gnu@1.1.1':
+ resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-x64-musl@1.1.1':
+ resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@napi-rs/nice-openharmony-arm64@1.1.1':
+ resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@napi-rs/nice-win32-arm64-msvc@1.1.1':
+ resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@napi-rs/nice-win32-ia32-msvc@1.1.1':
+ resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@napi-rs/nice-win32-x64-msvc@1.1.1':
+ resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@napi-rs/nice@1.1.1':
+ resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==}
+ engines: {node: '>= 10'}
+
+ '@nestjs/common@11.1.9':
+ resolution: {integrity: sha512-zDntUTReRbAThIfSp3dQZ9kKqI+LjgLp5YZN5c1bgNRDuoeLySAoZg46Bg1a+uV8TMgIRziHocglKGNzr6l+bQ==}
peerDependencies:
class-transformer: '>=0.4.1'
class-validator: '>=0.13.2'
@@ -2733,8 +2982,8 @@ packages:
class-validator:
optional: true
- '@nestjs/core@11.1.6':
- resolution: {integrity: sha512-siWX7UDgErisW18VTeJA+x+/tpNZrJewjTBsRPF3JVxuWRuAB1kRoiJcxHgln8Lb5UY9NdvklITR84DUEXD0Cg==}
+ '@nestjs/core@11.1.9':
+ resolution: {integrity: sha512-a00B0BM4X+9z+t3UxJqIZlemIwCQdYoPKrMcM+ky4z3pkqqG1eTWexjs+YXpGObnLnjtMPVKWlcZHp3adDYvUw==}
engines: {node: '>= 20'}
peerDependencies:
'@nestjs/common': ^11.0.0
@@ -2751,14 +3000,14 @@ packages:
'@nestjs/websockets':
optional: true
- '@nestjs/platform-express@10.4.20':
- resolution: {integrity: sha512-rh97mX3rimyf4xLMLHuTOBKe6UD8LOJ14VlJ1F/PTd6C6ZK9Ak6EHuJvdaGcSFQhd3ZMBh3I6CuujKGW9pNdIg==}
+ '@nestjs/platform-express@11.1.9':
+ resolution: {integrity: sha512-GVd3+0lO0mJq2m1kl9hDDnVrX3Nd4oH3oDfklz0pZEVEVS0KVSp63ufHq2Lu9cyPdSBuelJr9iPm2QQ1yX+Kmw==}
peerDependencies:
- '@nestjs/common': ^10.0.0
- '@nestjs/core': ^10.0.0
+ '@nestjs/common': ^11.0.0
+ '@nestjs/core': ^11.0.0
- '@nestjs/testing@11.1.6':
- resolution: {integrity: sha512-srYzzDNxGvVCe1j0SpTS9/ix75PKt6Sn6iMaH1rpJ6nj2g8vwNrhK0CoJJXvpCYgrnI+2WES2pprYnq8rAMYHA==}
+ '@nestjs/testing@11.1.9':
+ resolution: {integrity: sha512-UFxerBDdb0RUNxQNj25pvkvNE7/vxKhXYWBt3QuwBFnYISzRIzhVlyIqLfoV5YI3zV0m0Nn4QAn1KM0zzwfEng==}
peerDependencies:
'@nestjs/common': ^11.0.0
'@nestjs/core': ^11.0.0
@@ -2823,8 +3072,8 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/context-async-hooks@2.1.0':
- resolution: {integrity: sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg==}
+ '@opentelemetry/context-async-hooks@2.2.0':
+ resolution: {integrity: sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
@@ -2835,6 +3084,12 @@ packages:
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
+ '@opentelemetry/core@2.2.0':
+ resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
'@opentelemetry/instrumentation-amqplib@0.51.0':
resolution: {integrity: sha512-XGmjYwjVRktD4agFnWBWQXo9SiYHKBxR6Ag3MLXwtLE4R99N3a08kGKM5SC1qOFKIELcQDGFEFT9ydXMH00Luw==}
engines: {node: ^18.19.0 || >=20.6.0}
@@ -2983,20 +3238,20 @@ packages:
resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==}
engines: {node: ^18.19.0 || >=20.6.0}
- '@opentelemetry/resources@2.1.0':
- resolution: {integrity: sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==}
+ '@opentelemetry/resources@2.2.0':
+ resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
- '@opentelemetry/sdk-trace-base@2.1.0':
- resolution: {integrity: sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==}
+ '@opentelemetry/sdk-trace-base@2.2.0':
+ resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
- '@opentelemetry/semantic-conventions@1.37.0':
- resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==}
+ '@opentelemetry/semantic-conventions@1.38.0':
+ resolution: {integrity: sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==}
engines: {node: '>=14'}
'@opentelemetry/sql-common@0.41.2':
@@ -3005,116 +3260,141 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.1.0
- '@paralleldrive/cuid2@2.2.2':
- resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
+ '@paralleldrive/cuid2@2.3.1':
+ resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==}
- '@parcel/watcher-android-arm64@2.5.0':
- resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==}
+ '@parcel/watcher-android-arm64@2.5.1':
+ resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [android]
- '@parcel/watcher-darwin-arm64@2.5.0':
- resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==}
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [darwin]
- '@parcel/watcher-darwin-x64@2.5.0':
- resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==}
+ '@parcel/watcher-darwin-x64@2.5.1':
+ resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [darwin]
- '@parcel/watcher-freebsd-x64@2.5.0':
- resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==}
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [freebsd]
- '@parcel/watcher-linux-arm-glibc@2.5.0':
- resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==}
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@parcel/watcher-linux-arm-musl@2.5.0':
- resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==}
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [musl]
- '@parcel/watcher-linux-arm64-glibc@2.5.0':
- resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==}
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@parcel/watcher-linux-arm64-musl@2.5.0':
- resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==}
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@parcel/watcher-linux-x64-glibc@2.5.0':
- resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==}
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@parcel/watcher-linux-x64-musl@2.5.0':
- resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==}
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@parcel/watcher-win32-arm64@2.5.0':
- resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==}
+ '@parcel/watcher-win32-arm64@2.5.1':
+ resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [win32]
- '@parcel/watcher-win32-ia32@2.5.0':
- resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==}
+ '@parcel/watcher-win32-ia32@2.5.1':
+ resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
engines: {node: '>= 10.0.0'}
cpu: [ia32]
os: [win32]
- '@parcel/watcher-win32-x64@2.5.0':
- resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==}
+ '@parcel/watcher-win32-x64@2.5.1':
+ resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [win32]
- '@parcel/watcher@2.5.0':
- resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==}
+ '@parcel/watcher@2.5.1':
+ resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
engines: {node: '>= 10.0.0'}
- '@peculiar/asn1-android@2.3.10':
- resolution: {integrity: sha512-z9Rx9cFJv7UUablZISe7uksNbFJCq13hO0yEAOoIpAymALTLlvUOSLnGiQS7okPaM5dP42oTLhezH6XDXRXjGw==}
+ '@peculiar/asn1-android@2.6.0':
+ resolution: {integrity: sha512-cBRCKtYPF7vJGN76/yG8VbxRcHLPF3HnkoHhKOZeHpoVtbMYfY9ROKtH3DtYUY9m8uI1Mh47PRhHf2hSK3xcSQ==}
- '@peculiar/asn1-ecc@2.3.8':
- resolution: {integrity: sha512-Ah/Q15y3A/CtxbPibiLM/LKcMbnLTdUdLHUgdpB5f60sSvGkXzxJCu5ezGTFHogZXWNX3KSmYqilCrfdmBc6pQ==}
+ '@peculiar/asn1-cms@2.6.0':
+ resolution: {integrity: sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==}
- '@peculiar/asn1-rsa@2.3.8':
- resolution: {integrity: sha512-ES/RVEHu8VMYXgrg3gjb1m/XG0KJWnV4qyZZ7mAg7rrF3VTmRbLxO8mk+uy0Hme7geSMebp+Wvi2U6RLLEs12Q==}
+ '@peculiar/asn1-csr@2.6.0':
+ resolution: {integrity: sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==}
- '@peculiar/asn1-schema@2.3.8':
- resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==}
+ '@peculiar/asn1-ecc@2.6.0':
+ resolution: {integrity: sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==}
- '@peculiar/asn1-x509@2.3.8':
- resolution: {integrity: sha512-voKxGfDU1c6r9mKiN5ZUsZWh3Dy1BABvTM3cimf0tztNwyMJPhiXY94eRTgsMQe6ViLfT6EoXxkWVzcm3mFAFw==}
+ '@peculiar/asn1-pfx@2.6.0':
+ resolution: {integrity: sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==}
+
+ '@peculiar/asn1-pkcs8@2.6.0':
+ resolution: {integrity: sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==}
+
+ '@peculiar/asn1-pkcs9@2.6.0':
+ resolution: {integrity: sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==}
+
+ '@peculiar/asn1-rsa@2.6.0':
+ resolution: {integrity: sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==}
+
+ '@peculiar/asn1-schema@2.6.0':
+ resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==}
+
+ '@peculiar/asn1-x509-attr@2.6.0':
+ resolution: {integrity: sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==}
+
+ '@peculiar/asn1-x509@2.6.0':
+ resolution: {integrity: sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==}
+
+ '@peculiar/x509@1.14.2':
+ resolution: {integrity: sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==}
+ engines: {node: '>=22.0.0'}
'@peertube/http-signature@1.7.0':
resolution: {integrity: sha512-aGQIwo6/sWtyyqhVK4e1MtxYz4N1X8CNt6SOtCc+Wnczs5S5ONaLHDDR8LYaGn0MgOwvGgXyuZ5sJIfd7iyoUw==}
engines: {node: '>=0.10'}
+ '@pinojs/redact@0.4.0':
+ resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -3124,14 +3404,14 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.8
- '@readme/better-ajv-errors@2.3.2':
- resolution: {integrity: sha512-T4GGnRAlY3C339NhoUpgJJFsMYko9vIgFAlhgV+/vEGFw66qEY4a4TRJIAZBcX/qT1pq5DvXSme+SQODHOoBrw==}
+ '@readme/better-ajv-errors@2.4.0':
+ resolution: {integrity: sha512-9WODaOAKSl/mU+MYNZ2aHCrkoRSvmQ+1YkLj589OEqqjOAhbn8j7Z+ilYoiTu/he6X63/clsxxAB4qny9/dDzg==}
engines: {node: '>=18'}
peerDependencies:
ajv: 4.11.8 - 8
- '@readme/openapi-parser@5.0.2':
- resolution: {integrity: sha512-EDecF1OPz28PFHDrFXS2pu+VeBE1Skta0AgdgvODr3uWBU1sFDffo+zRHDQWswIpQVdfhveSyPg/gXZR37QCPQ==}
+ '@readme/openapi-parser@5.2.1':
+ resolution: {integrity: sha512-dyRrGM2ZW+imhDkA8pcq4ChKDAFvhVf15hS+UEqrjdfQzN8r4ekUTtL5k0/4izfUork/rd8T+e/pbYOYk67Pnw==}
engines: {node: '>=20'}
peerDependencies:
openapi-types: '>=7'
@@ -3140,8 +3420,8 @@ packages:
resolution: {integrity: sha512-9FC/6ho8uFa8fV50+FPy/ngWN53jaUu4GRXlAjcxIRrzhltJnpKkBG2Tp0IDraFJeWrOpk84RJ9EMEEYzaI1Bw==}
engines: {node: '>=18'}
- '@redocly/ajv@8.11.2':
- resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==}
+ '@redocly/ajv@8.17.1':
+ resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==}
'@redocly/config@0.22.2':
resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==}
@@ -3150,8 +3430,8 @@ packages:
resolution: {integrity: sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==}
engines: {node: '>=18.17.0', npm: '>=9.5.0'}
- '@rolldown/pluginutils@1.0.0-beta.29':
- resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
+ '@rolldown/pluginutils@1.0.0-beta.50':
+ resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==}
'@rollup/plugin-json@6.1.0':
resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
@@ -3162,8 +3442,8 @@ packages:
rollup:
optional: true
- '@rollup/plugin-replace@6.0.2':
- resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==}
+ '@rollup/plugin-replace@6.0.3':
+ resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -3180,132 +3460,132 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.52.4':
- resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==}
+ '@rollup/rollup-android-arm-eabi@4.53.3':
+ resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.52.4':
- resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==}
+ '@rollup/rollup-android-arm64@4.53.3':
+ resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.52.4':
- resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==}
+ '@rollup/rollup-darwin-arm64@4.53.3':
+ resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.52.4':
- resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==}
+ '@rollup/rollup-darwin-x64@4.53.3':
+ resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.52.4':
- resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==}
+ '@rollup/rollup-freebsd-arm64@4.53.3':
+ resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.52.4':
- resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==}
+ '@rollup/rollup-freebsd-x64@4.53.3':
+ resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.52.4':
- resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
+ resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.52.4':
- resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==}
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
+ resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.52.4':
- resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==}
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
+ resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.52.4':
- resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==}
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
+ resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.52.4':
- resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==}
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
+ resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-gnu@4.52.4':
- resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==}
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
+ resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-gnu@4.52.4':
- resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==}
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
+ resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.52.4':
- resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==}
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
+ resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.52.4':
- resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==}
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
+ resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.52.4':
- resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==}
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.52.4':
- resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==}
+ '@rollup/rollup-linux-x64-musl@4.53.3':
+ resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openharmony-arm64@4.52.4':
- resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==}
+ '@rollup/rollup-openharmony-arm64@4.53.3':
+ resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.52.4':
- resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==}
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
+ resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.52.4':
- resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==}
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
+ resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.52.4':
- resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==}
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.52.4':
- resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==}
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
+ resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==}
cpu: [x64]
os: [win32]
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@rushstack/node-core-library@5.17.0':
- resolution: {integrity: sha512-24vt1GbHN6kyIglRMTVpyEiNRRRJK8uZHc1XoGAhmnTDKnrWet8OmOpImMswJIe6gM78eV8cMg1HXwuUHkSSgg==}
+ '@rushstack/node-core-library@5.19.0':
+ resolution: {integrity: sha512-BxAopbeWBvNJ6VGiUL+5lbJXywTdsnMeOS8j57Cn/xY10r6sV/gbsTlfYKjzVCUBZATX2eRzJHSMCchsMTGN6A==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
@@ -3323,50 +3603,50 @@ packages:
'@rushstack/rig-package@0.6.0':
resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==}
- '@rushstack/terminal@0.19.1':
- resolution: {integrity: sha512-jsBuSad67IDVMO2yp0hDfs0OdE4z3mDIjIL2pclDT3aEJboeZXE85e1HjuD0F6JoW3XgHvDwoX+WOV+AVTDQeA==}
+ '@rushstack/terminal@0.19.4':
+ resolution: {integrity: sha512-f4XQk02CrKfrMgyOfhYd3qWI944dLC21S4I/LUhrlAP23GTMDNG6EK5effQtFkISwUKCgD9vMBrJZaPSUquxWQ==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
'@types/node':
optional: true
- '@rushstack/ts-command-line@5.1.1':
- resolution: {integrity: sha512-HPzFsUcr+wZ3oQI08Ec/E6cuiAVHKzrXZGHhwiwIGygAFiqN5QzX+ff30n70NU2WyE26CykgMwBZZSSyHCJrzA==}
+ '@rushstack/ts-command-line@5.1.4':
+ resolution: {integrity: sha512-H0I6VdJ6sOUbktDFpP2VW5N29w8v4hRoNZOQz02vtEi6ZTYL1Ju8u+TcFiFawUDrUsx/5MQTUhd79uwZZVwVlA==}
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
- '@sentry-internal/browser-utils@10.20.0':
- resolution: {integrity: sha512-9+NybrYs+dEM2iW5uRAYEhKkNK0XhDea5jovtDUXEvdSCMJFcdR88uztkftnCur45/hpvbgSULsGPUdHPb5ITw==}
+ '@sentry-internal/browser-utils@10.26.0':
+ resolution: {integrity: sha512-rPg1+JZlfp912pZONQAWZzbSaZ9L6R2VrMcCEa+2e2Gqk9um4b+LqF5RQWZsbt5Z0n0azSy/KQ6zAe/zTPXSOg==}
engines: {node: '>=18'}
- '@sentry-internal/feedback@10.20.0':
- resolution: {integrity: sha512-R/eGLKl7WDccLKBorEbyTsy5b99w/k4v80SntE8HL2rsO7DCDXma8TGmtHd+iZnw8dUci+EVrw7LbeGSgf3QzA==}
+ '@sentry-internal/feedback@10.26.0':
+ resolution: {integrity: sha512-0vk9eQP0CXD7Y2WkcCIWHaAqnXOAi18/GupgWLnbB2kuQVYVtStWxtW+OWRe8W/XwSnZ5m6JBTVeokuk/O16DQ==}
engines: {node: '>=18'}
'@sentry-internal/node-cpu-profiler@2.2.0':
resolution: {integrity: sha512-oLHVYurqZfADPh5hvmQYS5qx8t0UZzT2u6+/68VXsFruQEOnYJTODKgU3BVLmemRs3WE6kCJjPeFdHVYOQGSzQ==}
engines: {node: '>=18'}
- '@sentry-internal/replay-canvas@10.20.0':
- resolution: {integrity: sha512-8DBawFi4F4e2Cu2ToiitCnYsK8idrDOv66Vq+N6c8e3qFitTTuoPQwOihb2+HY4CB06ABPW3WvfZntJJmsf91w==}
+ '@sentry-internal/replay-canvas@10.26.0':
+ resolution: {integrity: sha512-vs7d/P+8M1L1JVAhhJx2wo15QDhqAipnEQvuRZ6PV7LUcS1un9/Vx49FMxpIkx6JcKADJVwtXrS1sX2hoNT/kw==}
engines: {node: '>=18'}
- '@sentry-internal/replay@10.20.0':
- resolution: {integrity: sha512-+XPYp0CuJnf+c36/c+hHrY6wAPHCdnqllZeyU7+9LAiKsdhN8Oo4eF1v5zd097qDZBg1NrKhU44ScJIzz+vygw==}
+ '@sentry-internal/replay@10.26.0':
+ resolution: {integrity: sha512-FMySQnY2/p0dVtFUBgUO+aMdK2ovqnd7Q/AkvMQUsN/5ulyj6KZx3JX3CqOqRtAr1izoCe4Kh2pi5t//sQmvsg==}
engines: {node: '>=18'}
- '@sentry/browser@10.20.0':
- resolution: {integrity: sha512-zcf8HwFiRbzjZL9KbLev44eEOf+yl+3svQbs2BlR2KAYGaB10swV5abij0UTTGO7ClnqUZdcGpwiyyfPS6mjHg==}
+ '@sentry/browser@10.26.0':
+ resolution: {integrity: sha512-uvV4hnkt8bh8yP0disJ0fszy8FdnkyGtzyIVKdeQZbNUefwbDhd3H0KJrAHhJ5ocULMH3B+dipdPmw2QXbEflg==}
engines: {node: '>=18'}
- '@sentry/core@10.20.0':
- resolution: {integrity: sha512-S291KihnOIB8i7mVJIJBVHBMcCfIoY/KDJBHEfBoHY9M56g2An4FVhM9+/xR85+IoMkTySdXN08k9LEyQz4FpQ==}
+ '@sentry/core@10.26.0':
+ resolution: {integrity: sha512-TjDe5QI37SLuV0q3nMOH8JcPZhv2e85FALaQMIhRILH9Ce6G7xW5GSjmH91NUVq8yc3XtiqYlz/EenEZActc4Q==}
engines: {node: '>=18'}
- '@sentry/node-core@10.20.0':
- resolution: {integrity: sha512-9BelcS9722jionzuyUNff4Bqx6fMFlYlK+5gMZYxAzOdS1AYZeFiYNVV2GlCGXfDLSHTnE1rOGH6QOsUdgCdbg==}
+ '@sentry/node-core@10.26.0':
+ resolution: {integrity: sha512-7OrHVn8XAsq9mMVMlpL18XTKQEVcLOJSo0n2M7QGKfFk/OfVtSFMcUWGqN1qhYtT9aMTr2bjtR5+BI33djnNTQ==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -3377,12 +3657,12 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
'@opentelemetry/semantic-conventions': ^1.37.0
- '@sentry/node@10.20.0':
- resolution: {integrity: sha512-Hv6cxQ2ilL54lF6+WwvvrvJEkt0fwUAAQZNwfAR0CfuP4Zg8FPQvxDeLhryd2Qr0nwPMNi3eYjypORjD3dcMLg==}
+ '@sentry/node@10.26.0':
+ resolution: {integrity: sha512-VUwNoKYhRpnHQSj9lty1TgooO+1wcpS1V0K87HU8sZEas5gx3Ujiouk5ocPjlgbKreoYOApgOnEEIq5W/hfQcQ==}
engines: {node: '>=18'}
- '@sentry/opentelemetry@10.20.0':
- resolution: {integrity: sha512-91hr3RbMSUWgZb1BpW0gjlPsFaPtx0oNY2HYoC12T//1E0RMV183McBKbghBdT9swjhw112jeTFEERMJCaJyNw==}
+ '@sentry/opentelemetry@10.26.0':
+ resolution: {integrity: sha512-ASJdOwn6NwMH2ZeBrnGJI+l/xkJp1AOiQ5FWkvTqLc/vHX+r3PDMO7c+koecY+LiZxSzZF4IV8sALXfOh6UnwA==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -3391,13 +3671,13 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
'@opentelemetry/semantic-conventions': ^1.37.0
- '@sentry/profiling-node@10.20.0':
- resolution: {integrity: sha512-Ov+GmBSGlv+OWEaMps31M952/hGKLaqjKeF3KiIAVzo6SnzAhbylaItcCiQyk5ZFyTrVWBKGp2VbaN0/79yZ3A==}
+ '@sentry/profiling-node@10.26.0':
+ resolution: {integrity: sha512-NgfKgrJc39q/khkWZFph1tiZ1uUadtL8VrBTe+7eB/vogPAuEJa+eH/oCS3/M+Pu2fal61MoCw+2qHDH5JDxQQ==}
engines: {node: '>=18'}
hasBin: true
- '@sentry/vue@10.20.0':
- resolution: {integrity: sha512-3mWc81mLs1CpXrihuTQNXwt0HfOIy7BAZMvtYgaTuIDvooYtBbsZ+7yGDkcwsWBtfAvE7/yP2h95M4HRIw5KyQ==}
+ '@sentry/vue@10.26.0':
+ resolution: {integrity: sha512-KfgELqzuFc8beeYbx6u3Ed5l8Lj/iG0h8AgQ7YjK3FANsuwwFRioycwnoEMIJbEuKC9V3iRSHXk2W5Dgt1WWqw==}
engines: {node: '>=18'}
peerDependencies:
pinia: 2.x || 3.x
@@ -3406,23 +3686,23 @@ packages:
pinia:
optional: true
- '@shikijs/core@3.13.0':
- resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==}
+ '@shikijs/core@3.15.0':
+ resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==}
- '@shikijs/engine-javascript@3.13.0':
- resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==}
+ '@shikijs/engine-javascript@3.15.0':
+ resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==}
- '@shikijs/engine-oniguruma@3.13.0':
- resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==}
+ '@shikijs/engine-oniguruma@3.15.0':
+ resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==}
- '@shikijs/langs@3.13.0':
- resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==}
+ '@shikijs/langs@3.15.0':
+ resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==}
- '@shikijs/themes@3.13.0':
- resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==}
+ '@shikijs/themes@3.15.0':
+ resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==}
- '@shikijs/types@3.13.0':
- resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==}
+ '@shikijs/types@3.15.0':
+ resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -3436,8 +3716,8 @@ packages:
'@sideway/pinpoint@2.0.0':
resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
- '@simplewebauthn/server@12.0.0':
- resolution: {integrity: sha512-aJdTe9GikOk40U7Q5Mm/Sqkxcq4a2oPZAcLcnyqMyFqrUaOS6vdsZW8/H3Mnsw9umcr88pcgB7kozPPt+5wOBw==}
+ '@simplewebauthn/server@13.2.2':
+ resolution: {integrity: sha512-HcWLW28yTMGXpwE9VLx9J+N2KEUaELadLrkPEEI9tpI5la70xNEVEsu/C+m3u7uoq4FulLqZQhgBCzR9IZhFpA==}
engines: {node: '>=20.0.0'}
'@simplewebauthn/types@12.0.0':
@@ -3451,17 +3731,14 @@ packages:
resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
engines: {node: '>=14.16'}
- '@sindresorhus/is@7.0.1':
- resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==}
+ '@sindresorhus/is@7.1.1':
+ resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==}
engines: {node: '>=18'}
'@sindresorhus/merge-streams@4.0.0':
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
- '@sinonjs/commons@2.0.0':
- resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==}
-
'@sinonjs/commons@3.0.1':
resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
@@ -3474,18 +3751,14 @@ packages:
'@sinonjs/fake-timers@15.0.0':
resolution: {integrity: sha512-dlUB2oL+hDIYkIq/OWFBDhQAuU6kDey3eeMiYpVb7UXHhkMq/r1HloKXAbJwJZpYWkFWsydLjMqDpueMUEOjXQ==}
- '@sinonjs/samsam@8.0.0':
- resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==}
+ '@sinonjs/samsam@8.0.3':
+ resolution: {integrity: sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==}
'@sinonjs/text-encoding@0.7.3':
resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==}
- '@smithy/abort-controller@2.2.0':
- resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==}
- engines: {node: '>=14.0.0'}
-
- '@smithy/abort-controller@4.2.0':
- resolution: {integrity: sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg==}
+ '@smithy/abort-controller@4.2.5':
+ resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==}
engines: {node: '>=18.0.0'}
'@smithy/chunked-blob-reader-native@4.2.1':
@@ -3496,152 +3769,136 @@ packages:
resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==}
engines: {node: '>=18.0.0'}
- '@smithy/config-resolver@4.3.0':
- resolution: {integrity: sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ==}
+ '@smithy/config-resolver@4.4.3':
+ resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==}
engines: {node: '>=18.0.0'}
- '@smithy/core@3.15.0':
- resolution: {integrity: sha512-VJWncXgt+ExNn0U2+Y7UywuATtRYaodGQKFo9mDyh70q+fJGedfrqi2XuKU1BhiLeXgg6RZrW7VEKfeqFhHAJA==}
+ '@smithy/core@3.18.5':
+ resolution: {integrity: sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==}
engines: {node: '>=18.0.0'}
- '@smithy/credential-provider-imds@4.2.0':
- resolution: {integrity: sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big==}
+ '@smithy/credential-provider-imds@4.2.5':
+ resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-codec@4.2.0':
- resolution: {integrity: sha512-XE7CtKfyxYiNZ5vz7OvyTf1osrdbJfmUy+rbh+NLQmZumMGvY0mT0Cq1qKSfhrvLtRYzMsOBuRpi10dyI0EBPg==}
+ '@smithy/eventstream-codec@4.2.5':
+ resolution: {integrity: sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-browser@4.2.0':
- resolution: {integrity: sha512-U53p7fcrk27k8irLhOwUu+UYnBqsXNLKl1XevOpsxK3y1Lndk8R7CSiZV6FN3fYFuTPuJy5pP6qa/bjDzEkRvA==}
+ '@smithy/eventstream-serde-browser@4.2.5':
+ resolution: {integrity: sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-config-resolver@4.3.0':
- resolution: {integrity: sha512-uwx54t8W2Yo9Jr3nVF5cNnkAAnMCJ8Wrm+wDlQY6rY/IrEgZS3OqagtCu/9ceIcZFQ1zVW/zbN9dxb5esuojfA==}
+ '@smithy/eventstream-serde-config-resolver@4.3.5':
+ resolution: {integrity: sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-node@4.2.0':
- resolution: {integrity: sha512-yjM2L6QGmWgJjVu/IgYd6hMzwm/tf4VFX0lm8/SvGbGBwc+aFl3hOzvO/e9IJ2XI+22Tx1Zg3vRpFRs04SWFcg==}
+ '@smithy/eventstream-serde-node@4.2.5':
+ resolution: {integrity: sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-universal@4.2.0':
- resolution: {integrity: sha512-C3jxz6GeRzNyGKhU7oV656ZbuHY93mrfkT12rmjDdZch142ykjn8do+VOkeRNjSGKw01p4g+hdalPYPhmMwk1g==}
+ '@smithy/eventstream-serde-universal@4.2.5':
+ resolution: {integrity: sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==}
engines: {node: '>=18.0.0'}
- '@smithy/fetch-http-handler@5.3.1':
- resolution: {integrity: sha512-3AvYYbB+Dv5EPLqnJIAgYw/9+WzeBiUYS8B+rU0pHq5NMQMvrZmevUROS4V2GAt0jEOn9viBzPLrZE+riTNd5Q==}
+ '@smithy/fetch-http-handler@5.3.6':
+ resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==}
engines: {node: '>=18.0.0'}
- '@smithy/hash-blob-browser@4.2.1':
- resolution: {integrity: sha512-Os9cg1fTXMwuqbvjemELlf+HB5oEeVyZmYsTbAtDQBmjGyibjmbeeqcaw7xOJLIHrkH/u0wAYabNcN6FRTqMRg==}
+ '@smithy/hash-blob-browser@4.2.6':
+ resolution: {integrity: sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==}
engines: {node: '>=18.0.0'}
- '@smithy/hash-node@4.2.0':
- resolution: {integrity: sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA==}
+ '@smithy/hash-node@4.2.5':
+ resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==}
engines: {node: '>=18.0.0'}
- '@smithy/hash-stream-node@4.2.0':
- resolution: {integrity: sha512-8dELAuGv+UEjtzrpMeNBZc1sJhO8GxFVV/Yh21wE35oX4lOE697+lsMHBoUIFAUuYkTMIeu0EuJSEsH7/8Y+UQ==}
+ '@smithy/hash-stream-node@4.2.5':
+ resolution: {integrity: sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==}
engines: {node: '>=18.0.0'}
- '@smithy/invalid-dependency@4.2.0':
- resolution: {integrity: sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A==}
+ '@smithy/invalid-dependency@4.2.5':
+ resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==}
engines: {node: '>=18.0.0'}
- '@smithy/is-array-buffer@2.0.0':
- resolution: {integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==}
+ '@smithy/is-array-buffer@2.2.0':
+ resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
engines: {node: '>=14.0.0'}
'@smithy/is-array-buffer@4.2.0':
resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==}
engines: {node: '>=18.0.0'}
- '@smithy/md5-js@4.2.0':
- resolution: {integrity: sha512-LFEPniXGKRQArFmDQ3MgArXlClFJMsXDteuQQY8WG1/zzv6gVSo96+qpkuu1oJp4MZsKrwchY0cuAoPKzEbaNA==}
+ '@smithy/md5-js@4.2.5':
+ resolution: {integrity: sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-content-length@4.2.0':
- resolution: {integrity: sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ==}
+ '@smithy/middleware-content-length@4.2.5':
+ resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-endpoint@4.3.1':
- resolution: {integrity: sha512-JtM4SjEgImLEJVXdsbvWHYiJ9dtuKE8bqLlvkvGi96LbejDL6qnVpVxEFUximFodoQbg0Gnkyff9EKUhFhVJFw==}
+ '@smithy/middleware-endpoint@4.3.12':
+ resolution: {integrity: sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-retry@4.4.1':
- resolution: {integrity: sha512-wXxS4ex8cJJteL0PPQmWYkNi9QKDWZIpsndr0wZI2EL+pSSvA/qqxXU60gBOJoIc2YgtZSWY/PE86qhKCCKP1w==}
+ '@smithy/middleware-retry@4.4.12':
+ resolution: {integrity: sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-serde@4.2.0':
- resolution: {integrity: sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw==}
+ '@smithy/middleware-serde@4.2.6':
+ resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-stack@4.2.0':
- resolution: {integrity: sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg==}
+ '@smithy/middleware-stack@4.2.5':
+ resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==}
engines: {node: '>=18.0.0'}
- '@smithy/node-config-provider@4.3.0':
- resolution: {integrity: sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA==}
+ '@smithy/node-config-provider@4.3.5':
+ resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==}
engines: {node: '>=18.0.0'}
- '@smithy/node-http-handler@2.5.0':
- resolution: {integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==}
- engines: {node: '>=14.0.0'}
-
- '@smithy/node-http-handler@4.3.0':
- resolution: {integrity: sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q==}
+ '@smithy/node-http-handler@4.4.5':
+ resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==}
engines: {node: '>=18.0.0'}
- '@smithy/property-provider@4.2.0':
- resolution: {integrity: sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw==}
+ '@smithy/property-provider@4.2.5':
+ resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==}
engines: {node: '>=18.0.0'}
- '@smithy/protocol-http@3.3.0':
- resolution: {integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==}
- engines: {node: '>=14.0.0'}
-
- '@smithy/protocol-http@5.3.0':
- resolution: {integrity: sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q==}
+ '@smithy/protocol-http@5.3.5':
+ resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==}
engines: {node: '>=18.0.0'}
- '@smithy/querystring-builder@2.2.0':
- resolution: {integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==}
- engines: {node: '>=14.0.0'}
-
- '@smithy/querystring-builder@4.2.0':
- resolution: {integrity: sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A==}
+ '@smithy/querystring-builder@4.2.5':
+ resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==}
engines: {node: '>=18.0.0'}
- '@smithy/querystring-parser@4.2.0':
- resolution: {integrity: sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA==}
+ '@smithy/querystring-parser@4.2.5':
+ resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==}
engines: {node: '>=18.0.0'}
- '@smithy/service-error-classification@4.2.0':
- resolution: {integrity: sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA==}
+ '@smithy/service-error-classification@4.2.5':
+ resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==}
engines: {node: '>=18.0.0'}
- '@smithy/shared-ini-file-loader@4.3.0':
- resolution: {integrity: sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ==}
+ '@smithy/shared-ini-file-loader@4.4.0':
+ resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==}
engines: {node: '>=18.0.0'}
- '@smithy/signature-v4@5.3.0':
- resolution: {integrity: sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g==}
+ '@smithy/signature-v4@5.3.5':
+ resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==}
engines: {node: '>=18.0.0'}
- '@smithy/smithy-client@4.7.1':
- resolution: {integrity: sha512-WXVbiyNf/WOS/RHUoFMkJ6leEVpln5ojCjNBnzoZeMsnCg3A0BRhLK3WYc4V7PmYcYPZh9IYzzAg9XcNSzYxYQ==}
+ '@smithy/smithy-client@4.9.8':
+ resolution: {integrity: sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==}
engines: {node: '>=18.0.0'}
- '@smithy/types@2.12.0':
- resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==}
- engines: {node: '>=14.0.0'}
-
- '@smithy/types@4.6.0':
- resolution: {integrity: sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==}
+ '@smithy/types@4.9.0':
+ resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==}
engines: {node: '>=18.0.0'}
- '@smithy/url-parser@4.2.0':
- resolution: {integrity: sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A==}
+ '@smithy/url-parser@4.2.5':
+ resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==}
engines: {node: '>=18.0.0'}
'@smithy/util-base64@4.3.0':
@@ -3656,8 +3913,8 @@ packages:
resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==}
engines: {node: '>=18.0.0'}
- '@smithy/util-buffer-from@2.0.0':
- resolution: {integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==}
+ '@smithy/util-buffer-from@2.2.0':
+ resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
engines: {node: '>=14.0.0'}
'@smithy/util-buffer-from@4.2.0':
@@ -3668,52 +3925,48 @@ packages:
resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-browser@4.3.0':
- resolution: {integrity: sha512-H4MAj8j8Yp19Mr7vVtGgi7noJjvjJbsKQJkvNnLlrIFduRFT5jq5Eri1k838YW7rN2g5FTnXpz5ktKVr1KVgPQ==}
+ '@smithy/util-defaults-mode-browser@4.3.11':
+ resolution: {integrity: sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-node@4.2.1':
- resolution: {integrity: sha512-PuDcgx7/qKEMzV1QFHJ7E4/MMeEjaA7+zS5UNcHCLPvvn59AeZQ0DSDGMpqC2xecfa/1cNGm4l8Ec/VxCuY7Ug==}
+ '@smithy/util-defaults-mode-node@4.2.14':
+ resolution: {integrity: sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==}
engines: {node: '>=18.0.0'}
- '@smithy/util-endpoints@3.2.0':
- resolution: {integrity: sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg==}
+ '@smithy/util-endpoints@3.2.5':
+ resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==}
engines: {node: '>=18.0.0'}
'@smithy/util-hex-encoding@4.2.0':
resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==}
engines: {node: '>=18.0.0'}
- '@smithy/util-middleware@4.2.0':
- resolution: {integrity: sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA==}
+ '@smithy/util-middleware@4.2.5':
+ resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==}
engines: {node: '>=18.0.0'}
- '@smithy/util-retry@4.2.0':
- resolution: {integrity: sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg==}
+ '@smithy/util-retry@4.2.5':
+ resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==}
engines: {node: '>=18.0.0'}
- '@smithy/util-stream@4.5.0':
- resolution: {integrity: sha512-0TD5M5HCGu5diEvZ/O/WquSjhJPasqv7trjoqHyWjNh/FBeBl7a0ztl9uFMOsauYtRfd8jvpzIAQhDHbx+nvZw==}
+ '@smithy/util-stream@4.5.6':
+ resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==}
engines: {node: '>=18.0.0'}
- '@smithy/util-uri-escape@2.2.0':
- resolution: {integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==}
- engines: {node: '>=14.0.0'}
-
'@smithy/util-uri-escape@4.2.0':
resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==}
engines: {node: '>=18.0.0'}
- '@smithy/util-utf8@2.0.0':
- resolution: {integrity: sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==}
+ '@smithy/util-utf8@2.3.0':
+ resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
engines: {node: '>=14.0.0'}
'@smithy/util-utf8@4.2.0':
resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==}
engines: {node: '>=18.0.0'}
- '@smithy/util-waiter@4.2.0':
- resolution: {integrity: sha512-0Z+nxUU4/4T+SL8BCNN4ztKdQjToNvUYmkF1kXO5T7Yz3Gafzh0HeIG6mrkN8Fz3gn9hSyxuAT+6h4vM+iQSBQ==}
+ '@smithy/util-waiter@4.2.5':
+ resolution: {integrity: sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==}
engines: {node: '>=18.0.0'}
'@smithy/uuid@1.1.0':
@@ -3761,11 +4014,11 @@ packages:
peerDependencies:
storybook: ^8.6.14
- '@storybook/addon-links@9.1.10':
- resolution: {integrity: sha512-MG0vktKX/qH+hSRnX2/TfEtSpO87G++H5D95PaBtPYwV+JqgZI5Qpq+ikC+s0wvCxlRgm3qy+NkeoHGze29T0g==}
+ '@storybook/addon-links@10.0.8':
+ resolution: {integrity: sha512-LnakruogdN5ND0cF0SOKyhzbEeIGDe1njkufX2aR9LOXQ0mMj5S2P86TdP87dR5R9bJjYYPPg/F7sjsAiI1Lqg==}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- storybook: ^9.1.10
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.8
peerDependenciesMeta:
react:
optional: true
@@ -3812,10 +4065,10 @@ packages:
react-dom:
optional: true
- '@storybook/builder-vite@9.1.10':
- resolution: {integrity: sha512-0ogI+toZJYaFptcFpRcRPOZ9/NrFUYhiaI09ggeEB1FF9ygHMVsobp4eaj4HjZI6V3x7cQwkd2ZmxAMQDBQuMA==}
+ '@storybook/builder-vite@10.0.8':
+ resolution: {integrity: sha512-kaf/pUENzXxYgQMHGGPNiIk1ieb+SOMuSeLKx8wAUOlQOrzhtSH+ItACW/l43t+O6YZ8jYHoNBMF1kdQ1+Y5+w==}
peerDependencies:
- storybook: ^9.1.10
+ storybook: ^10.0.8
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
'@storybook/components@8.6.14':
@@ -3828,25 +4081,38 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ '@storybook/csf-plugin@10.0.8':
+ resolution: {integrity: sha512-OtLUWHIm3SDGtclQn6Mdd/YsWizLBgdEBRAdekGtwI/TvICfT7gpWYIycP53v2t9ufu2MIXjsxtV2maZKs8sZg==}
+ peerDependencies:
+ esbuild: '*'
+ rollup: '*'
+ storybook: ^10.0.8
+ vite: '*'
+ webpack: '*'
+ peerDependenciesMeta:
+ esbuild:
+ optional: true
+ rollup:
+ optional: true
+ vite:
+ optional: true
+ webpack:
+ optional: true
+
'@storybook/csf-plugin@8.6.14':
resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==}
peerDependencies:
storybook: ^8.6.14
- '@storybook/csf-plugin@9.1.10':
- resolution: {integrity: sha512-247F/JU0Naxm/RIUnQYpqXeCL0wG8UNJkZe+/GkLjdqzsyML0lb+8OwBsWFfG8zfj6fkjmRU2mF44TnNkzoQcg==}
- peerDependencies:
- storybook: ^9.1.10
-
'@storybook/global@5.0.0':
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
- '@storybook/icons@1.2.12':
- resolution: {integrity: sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q==}
+ '@storybook/icons@1.6.0':
+ resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==}
engines: {node: '>=14.0.0'}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
'@storybook/instrumenter@8.6.14':
resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==}
@@ -3863,6 +4129,13 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ '@storybook/react-dom-shim@10.0.8':
+ resolution: {integrity: sha512-ojuH22MB9Sz6rWbhTmC5IErZr0ZADbZijtPteUdydezY7scORT00UtbNoBcG0V6iVjdChgDtSKw2KHUUfchKqg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.8
+
'@storybook/react-dom-shim@8.6.14':
resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==}
peerDependencies:
@@ -3870,29 +4143,20 @@ packages:
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^8.6.14
- '@storybook/react-dom-shim@9.1.10':
- resolution: {integrity: sha512-cxy8GTj73RMJIFPrgqdnMXePGX5iFohM5pDCZ63Te5m5GtzKqsILRXtBBLO6Ouexm/ZYRVznkKiwNKX/Fu24fQ==}
+ '@storybook/react-vite@10.0.8':
+ resolution: {integrity: sha512-HS2X4qlitrZr3/sN2+ollxAaNE813IasZRE8lOez1Ey1ISGBtYIb9rmJs82MK35+yDM0pHdiDjkFMD4SkNYh2g==}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- storybook: ^9.1.10
-
- '@storybook/react-vite@9.1.10':
- resolution: {integrity: sha512-k0wWlfoWakoHL3NZ1+38oxRH3WYyprFFX+WUb/4W8axrvpKogvdnxKCul/YB1HH5FcTagIfguamsPjKwB1ZkJg==}
- engines: {node: '>=20.0.0'}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- storybook: ^9.1.10
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.8
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
- '@storybook/react@9.1.10':
- resolution: {integrity: sha512-flG3Gn3EHZnxn92C7vrA2U4aGqpOKdf85fL43+J/2k9HF5AIyOFGlcv4LGVyKZ3LOAow/nGBVSXL9961h+ICRA==}
- engines: {node: '>=20.0.0'}
+ '@storybook/react@10.0.8':
+ resolution: {integrity: sha512-PkuPb8sAqmjjkowSzm3rutiSuETvZI2F8SnjbHE6FRqZWWK4iFoaUrQbrg5kpPAtX//xIrqkdFwlbmQ3skhiPA==}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
- storybook: ^9.1.10
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.8
typescript: '>= 4.9.x'
peerDependenciesMeta:
typescript:
@@ -3918,28 +4182,26 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
- '@storybook/vue3-vite@9.1.10':
- resolution: {integrity: sha512-6TiXT2dh7FR2AFNhT5TwbP/hMVzjmLgCGlP5KhKMtZe2xPkSzTd/z+z6RsK49vp0CaNcFus/3uPm0GIFDeeTCQ==}
- engines: {node: '>=20.0.0'}
+ '@storybook/vue3-vite@10.0.8':
+ resolution: {integrity: sha512-Bdum0SssJAbvwKfbKvTMEkpc9zapMG/GODxzqWO7XuycOZWrR0FPvj13y1gBhv0y66jBHMbtsLQ76uTyNFslIA==}
peerDependencies:
- storybook: ^9.1.10
+ storybook: ^10.0.8
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
- '@storybook/vue3@9.1.10':
- resolution: {integrity: sha512-tJl5ElDl5DNK4d/SSTuibKGPK8VqweDLjlcW8uamsDJEZ+a/qg2JmxhU3AlXTbB/BkJU8gfc6kN4HYN6JSMiwA==}
- engines: {node: '>=20.0.0'}
+ '@storybook/vue3@10.0.8':
+ resolution: {integrity: sha512-h7ztNeAemf3yXQIetkbKAv8l5JkuXC65TmpAYTZYZpWUof/uuAnMF4rXQlRnS6Nd2PRfA9mZGGlGxNDCm3StlA==}
peerDependencies:
- storybook: ^9.1.10
+ storybook: ^10.0.8
vue: ^3.0.0
- '@stylistic/eslint-plugin@2.13.0':
- resolution: {integrity: sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==}
+ '@stylistic/eslint-plugin@5.5.0':
+ resolution: {integrity: sha512-IeZF+8H0ns6prg4VrkhgL+yrvDXWDH2cKchrbh80ejG9dQgZWp10epHMbgRuQvgchLII/lfh6Xn3lu6+6L86Hw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>=8.40.0'
+ eslint: '>=9.0.0'
- '@swc/cli@0.7.8':
- resolution: {integrity: sha512-27Ov4rm0s2C6LLX+NDXfDVB69LGs8K94sXtFhgeUyQ4DBywZuCgTBu2loCNHRr8JhT9DeQvJM5j9FAu/THbo4w==}
+ '@swc/cli@0.7.9':
+ resolution: {integrity: sha512-AFQu3ZZ9IcdClTknxbug08S9ed/q8F3aYkO5NoZ+6IjQ5UEo1s2HN1GRKNvUslYx2EoVYxd+6xGcp6C7wwtxyQ==}
engines: {node: '>= 16.14.0'}
hasBin: true
peerDependencies:
@@ -3955,26 +4217,14 @@ packages:
cpu: [arm64]
os: [android]
- '@swc/core-darwin-arm64@1.13.20':
- resolution: {integrity: sha512-k/nqRwm6G3tw1BbCDxc3KmAMGsuDYA5Uh4MjYm23e+UziLyHz0z7W0zja3el+yGBIZXKlgSzWVFLsFDFzVqtgg==}
+ '@swc/core-darwin-arm64@1.15.3':
+ resolution: {integrity: sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
- '@swc/core-darwin-arm64@1.13.5':
- resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [darwin]
-
- '@swc/core-darwin-x64@1.13.20':
- resolution: {integrity: sha512-7xr+ACdUMNyrN87oEF1GvJIZJBAhGolfQVB0EYP08JEy8VSh//FEwfdlUz8gweaZyjOl1nuPS6ncXlKgZuZU8A==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [darwin]
-
- '@swc/core-darwin-x64@1.13.5':
- resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==}
+ '@swc/core-darwin-x64@1.15.3':
+ resolution: {integrity: sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
@@ -3985,112 +4235,60 @@ packages:
cpu: [x64]
os: [freebsd]
- '@swc/core-linux-arm-gnueabihf@1.13.20':
- resolution: {integrity: sha512-IaOLxU1U/oGV3lZ2T8tD5nB/5O60UFPqj5ZxYzDpCBVB73tDQDIxiDcro1X81nHbwJHjuHmbIrhoflS7LQN6+A==}
+ '@swc/core-linux-arm-gnueabihf@1.15.3':
+ resolution: {integrity: sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
- '@swc/core-linux-arm-gnueabihf@1.13.5':
- resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==}
- engines: {node: '>=10'}
- cpu: [arm]
- os: [linux]
-
- '@swc/core-linux-arm64-gnu@1.13.20':
- resolution: {integrity: sha512-Lg6FyotDydXGnNnlw+u7vCZzR2+fX3Q2HiULBTYl2dey3TvRyzAfEhdgMjUc4beRzf26U9rzMuTroJ6KMBCBjA==}
+ '@swc/core-linux-arm64-gnu@1.15.3':
+ resolution: {integrity: sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@swc/core-linux-arm64-gnu@1.13.5':
- resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@swc/core-linux-arm64-musl@1.13.20':
- resolution: {integrity: sha512-d1SvxmFykS0Ep8nPbduV1UwCvFjZ3ESzFKQdTbkr72bge8AseILBI9TbLTmoeWndDaTesiiTKRD5Y1iAvF1wvA==}
+ '@swc/core-linux-arm64-musl@1.15.3':
+ resolution: {integrity: sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@swc/core-linux-arm64-musl@1.13.5':
- resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@swc/core-linux-x64-gnu@1.13.20':
- resolution: {integrity: sha512-Bwmng57EuMod58Q8GDJA8rmUgFl20taK8w8MqeeDMiCnZY2+rJrNERbIX3sXZbwsf/kCIELZ7q4ZXiwdyB4zoQ==}
+ '@swc/core-linux-x64-gnu@1.15.3':
+ resolution: {integrity: sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@swc/core-linux-x64-gnu@1.13.5':
- resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@swc/core-linux-x64-musl@1.13.20':
- resolution: {integrity: sha512-osCm3VEKL/OIKInyhy75S5B+R+QGBdpR1B5vwTYqG/1RB4vFM3O5SDtRZabd6NV9Cxc9dcLztWyZjhs2qp63SQ==}
+ '@swc/core-linux-x64-musl@1.15.3':
+ resolution: {integrity: sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@swc/core-linux-x64-musl@1.13.5':
- resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@swc/core-win32-arm64-msvc@1.13.20':
- resolution: {integrity: sha512-svbQNirwEa6zwaAJPrEmQnMVZsOz8Jpr4nakFLkYIQwwJ73sBUkUJvH9ouIWmIu5bvgQrbQlRpxWTIY3e0Utlg==}
+ '@swc/core-win32-arm64-msvc@1.15.3':
+ resolution: {integrity: sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@swc/core-win32-arm64-msvc@1.13.5':
- resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [win32]
-
- '@swc/core-win32-ia32-msvc@1.13.20':
- resolution: {integrity: sha512-uVjjwGXJltUQK0v1qQSNGeMS6osLJuwgeTti5N7kxQ6mOfa1irxq+TX0YdIVQwIONMjzI+TP7lhqPeA9VdUjRg==}
+ '@swc/core-win32-ia32-msvc@1.15.3':
+ resolution: {integrity: sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
- '@swc/core-win32-ia32-msvc@1.13.5':
- resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==}
- engines: {node: '>=10'}
- cpu: [ia32]
- os: [win32]
-
- '@swc/core-win32-x64-msvc@1.13.20':
- resolution: {integrity: sha512-Xm1JAew/P0TgsPSXyo60IH865fAmt9b2Mzd0FBJ77Q1xA1o/Oi9teCeGChyFq3+6JFao6uT0N4mcI3BJ4WBfkA==}
+ '@swc/core-win32-x64-msvc@1.15.3':
+ resolution: {integrity: sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@swc/core-win32-x64-msvc@1.13.5':
- resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [win32]
-
- '@swc/core@1.13.5':
- resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==}
+ '@swc/core@1.15.3':
+ resolution: {integrity: sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==}
engines: {node: '>=10'}
peerDependencies:
'@swc/helpers': '>=0.5.17'
@@ -4101,8 +4299,8 @@ packages:
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
- '@swc/types@0.1.24':
- resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==}
+ '@swc/types@0.1.25':
+ resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
'@swc/wasm@1.2.130':
resolution: {integrity: sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==}
@@ -4110,8 +4308,8 @@ packages:
'@syuilo/aiscript@0.19.0':
resolution: {integrity: sha512-ZWG4s1m6RrFjE7NeIMaxFz769YO1jW5ReTrOROrEO4IHheOrjxxJ/Ffe2TUNqX9/XxDloMwfWplKhfSzx8LGMA==}
- '@syuilo/aiscript@1.1.2':
- resolution: {integrity: sha512-cijsHTiMjeECocElyjRIcWMPGDhZIX3YfCOyzI6AZM8ajxRQ2hSqJwEh9pDr4mVTml9kLMHWDHmgfHkTHRJ1sg==}
+ '@syuilo/aiscript@1.2.0':
+ resolution: {integrity: sha512-3MkKfqDftqHyouINgHEIHnoTVWEeL0L1o7Y7Y9d8qb5h5vZKphzH/KVG3R2iI6CHtmO1mWHHJx5A499f80H9FA==}
'@szmarczak/http-timer@5.0.1':
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
@@ -4205,11 +4403,19 @@ packages:
resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==}
engines: {node: '>=18'}
+ '@tokenizer/inflate@0.3.1':
+ resolution: {integrity: sha512-4oeoZEBQdLdt5WmP/hx1KZ6D3/Oid/0cUb2nk4F0pTDAWy+KCH3/EnAkZF/bvckWo8I33EqBm01lIPgmgc8rCA==}
+ engines: {node: '>=18'}
+
+ '@tokenizer/inflate@0.4.1':
+ resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==}
+ engines: {node: '>=18'}
+
'@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
- '@tsd/typescript@5.9.2':
- resolution: {integrity: sha512-mSMM0QtEPdMd+rdMDd17yCUYD4yI3pKHap89+jEZrZ3KIO5PhDofBjER0OtgHdvOXF74KMLO3fyD6k3Hz0v03A==}
+ '@tsd/typescript@5.9.3':
+ resolution: {integrity: sha512-JSSdNiS0wgd8GHhBwnMAI18Y8XPhLVN+dNelPfZCXFhy9Lb3NbnFyp9JKxxr54jSUkEJPk3cidvCoHducSaRMQ==}
engines: {node: '>=14.17'}
'@twemoji/parser@16.0.0':
@@ -4218,14 +4424,14 @@ packages:
'@types/accepts@1.3.7':
resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
- '@types/archiver@6.0.3':
- resolution: {integrity: sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==}
+ '@types/archiver@7.0.0':
+ resolution: {integrity: sha512-/3vwGwx9n+mCQdYZ2IKGGHEFL30I96UgBlk8EtRDDFQ9uxM1l4O5Ci6r00EMAkiDaTqD9DQ6nVrWRICnBPtzzg==}
'@types/argparse@1.0.38':
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
- '@types/aria-query@5.0.1':
- resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==}
+ '@types/aria-query@5.0.4':
+ resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -4239,26 +4445,23 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
- '@types/bcryptjs@2.4.6':
- resolution: {integrity: sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==}
-
'@types/body-parser@1.19.6':
resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
- '@types/braces@3.0.1':
- resolution: {integrity: sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==}
+ '@types/braces@3.0.5':
+ resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==}
'@types/canvas-confetti@1.9.0':
resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==}
- '@types/chai@5.2.2':
- resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
'@types/color-convert@2.0.4':
resolution: {integrity: sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==}
- '@types/color-name@1.1.1':
- resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==}
+ '@types/color-name@1.1.5':
+ resolution: {integrity: sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==}
'@types/connect@3.4.38':
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
@@ -4275,8 +4478,8 @@ packages:
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
- '@types/disposable-email-domains@1.0.2':
- resolution: {integrity: sha512-SDKwyYTjk3y5aZBxxc38yRecpJPjsqn57STz1bNxYYlv4k11bBe7QB8w4llXDTmQXKT1mFvgGmJv+8Zdu3YmJw==}
+ '@types/disposable-email-domains@1.0.6':
+ resolution: {integrity: sha512-+jHw0Q4ERuVYIChlUaoSm/VEuuNFeW7JgUU8Rwa9V1ym6q+gkGmBK5sGTDKqlfmsSdI5bFMHKlEatirPFvd8Xw==}
'@types/dlv@1.1.5':
resolution: {integrity: sha512-JHOWNfiWepAhfwlSw17kiWrWrk6od2dEQgHltJw9AS0JPFoLZJBge5+Dnil2NfdjAvJ/+vGSX60/BRW20PpUXw==}
@@ -4296,14 +4499,14 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- '@types/express-serve-static-core@4.17.33':
- resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
+ '@types/express-serve-static-core@5.1.0':
+ resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==}
- '@types/express@4.17.17':
- resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
+ '@types/express@5.0.4':
+ resolution: {integrity: sha512-g64dbryHk7loCIrsa0R3shBnEu5p6LPJ09bu9NG58+jz+cRUjFrc3Bz0kNQ7j9bXeCsrRDvNET1G54P/GJkAyA==}
- '@types/fluent-ffmpeg@2.1.27':
- resolution: {integrity: sha512-QiDWjihpUhriISNoBi2hJBRUUmoj/BMTYcfz+F+ZM9hHWBYABFAE6hjP/TbCZC0GWwlpa3FzvHH9RzFeRusZ7A==}
+ '@types/fluent-ffmpeg@2.1.28':
+ resolution: {integrity: sha512-5ovxsDwBcPfJ+eYs1I/ZpcYCnkce7pvH9AHSvrZllAp1ZPpTRDZAFjF3TRFbukxSgIYTTNYePbS0rKUmaxVbXw==}
'@types/hammerjs@2.0.46':
resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==}
@@ -4311,20 +4514,20 @@ packages:
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
- '@types/htmlescape@1.1.3':
- resolution: {integrity: sha512-tuC81YJXGUe0q8WRtBNW+uyx79rkkzWK651ALIXXYq5/u/IxjX4iHneGF2uUqzsNp+F+9J2mFZOv9jiLTtIq0w==}
-
'@types/http-cache-semantics@4.0.4':
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
'@types/http-link-header@1.0.7':
resolution: {integrity: sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==}
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
- '@types/istanbul-lib-report@3.0.0':
- resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
'@types/istanbul-reports@3.0.4':
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
@@ -4332,9 +4535,6 @@ packages:
'@types/js-yaml@4.0.9':
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
- '@types/jsdom@21.1.7':
- resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
-
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -4353,47 +4553,47 @@ packages:
'@types/matter-js@0.20.2':
resolution: {integrity: sha512-3PPKy3QxvZ89h9+wdBV2488I1JLVs7DEpIkPvgO8JC1mUdiVSO37ZIvVctOTD7hIq8OAL2gJ3ugGSuUip6DhCw==}
- '@types/mdast@4.0.3':
- resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==}
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
- '@types/mdx@2.0.3':
- resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
'@types/methods@1.1.4':
resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==}
- '@types/micromatch@4.0.9':
- resolution: {integrity: sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==}
+ '@types/micromatch@4.0.10':
+ resolution: {integrity: sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==}
- '@types/mime-types@2.1.4':
- resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==}
+ '@types/mime-types@3.0.1':
+ resolution: {integrity: sha512-xRMsfuQbnRq1Ef+C+RKaENOxXX87Ygl38W1vDfPHRku02TgQr+Qd8iivLtAMcR0KF5/29xlnFihkTlbqFrGOVQ==}
- '@types/mime@3.0.1':
- resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
+ '@types/mime@1.3.5':
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
- '@types/minimist@1.2.2':
- resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
+ '@types/minimist@1.2.5':
+ resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
- '@types/ms@0.7.34':
- resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/mysql@2.15.27':
resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==}
- '@types/node-fetch@2.6.11':
- resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
+ '@types/node-fetch@2.6.13':
+ resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==}
- '@types/node@20.19.19':
- resolution: {integrity: sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==}
+ '@types/node@20.19.25':
+ resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
- '@types/node@22.18.10':
- resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==}
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
- '@types/nodemailer@6.4.20':
- resolution: {integrity: sha512-uj83z0GqwqMUE6RI4EKptPlav0FYE6vpIlqJAnxzu+/sSezRdbH69rSBCMsdW6DdsCAzoFQZ52c2UIlhRVQYDA==}
+ '@types/nodemailer@7.0.4':
+ resolution: {integrity: sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==}
- '@types/normalize-package-data@2.4.1':
- resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+ '@types/normalize-package-data@2.4.4':
+ resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
'@types/oauth2orize-pkce@0.1.2':
resolution: {integrity: sha512-g5rDzqQTTUIJJpY7UWxb0EU1WyURIwOj3TndKC2krEEEmaKrnZXgoEBkR72QY2kp4cJ6N9cF2AqTPJ0Qyg+caA==}
@@ -4407,8 +4607,8 @@ packages:
'@types/offscreencanvas@2019.3.0':
resolution: {integrity: sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==}
- '@types/offscreencanvas@2019.7.0':
- resolution: {integrity: sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==}
+ '@types/offscreencanvas@2019.7.3':
+ resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==}
'@types/pg-pool@2.0.6':
resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==}
@@ -4416,35 +4616,32 @@ packages:
'@types/pg@8.15.5':
resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==}
- '@types/prop-types@15.7.15':
- resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
-
- '@types/pug@2.0.10':
- resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
+ '@types/pg@8.15.6':
+ resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==}
'@types/punycode@2.1.4':
resolution: {integrity: sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==}
- '@types/qrcode@1.5.5':
- resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==}
+ '@types/qrcode@1.5.6':
+ resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==}
- '@types/qs@6.9.7':
- resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
'@types/random-seed@0.3.5':
resolution: {integrity: sha512-CftxcDPAHgs0SLHU2dt+ZlDPJfGqLW3sZlC/ATr5vJDSe5tRLeOne7HMvCOJnFyF8e1U41wqzs3h6AMC613xtA==}
- '@types/range-parser@1.2.4':
- resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
'@types/ratelimiter@3.4.6':
resolution: {integrity: sha512-Bv6WLSXPGLVsBjkizXtn+ef78R92e36/DFQo2wXPTHtp1cYXF6rCULMqf9WcZPAtyMZMvQAtIPeYMA1xAyxghw==}
- '@types/react@18.0.28':
- resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
+ '@types/react@19.2.2':
+ resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
- '@types/readdir-glob@1.1.1':
- resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==}
+ '@types/readdir-glob@1.1.5':
+ resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==}
'@types/redis-info@3.0.3':
resolution: {integrity: sha512-VIkNy6JbYI/RLdbPHdm9JQvv6RVld2uE2/6Hdid38Qdq+zvDli2FTpImI8pC5zwp8xS8qVqfzlfyAub8xZEd5g==}
@@ -4458,9 +4655,6 @@ packages:
'@types/sanitize-html@2.16.0':
resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==}
- '@types/scheduler@0.26.0':
- resolution: {integrity: sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==}
-
'@types/seedrandom@2.4.34':
resolution: {integrity: sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==}
@@ -4470,8 +4664,14 @@ packages:
'@types/semver@7.7.1':
resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
- '@types/serve-static@1.15.1':
- resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
+ '@types/send@0.17.6':
+ resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
+
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+ '@types/serve-static@1.15.10':
+ resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
'@types/serviceworker@0.0.74':
resolution: {integrity: sha512-HNt7NJHrjGtCmI3h1+rsb1g/ZY0iy5KaeenfEV7zAWPSaCs49hEUvgH++V1BHNwlLfB3sbjPh3pSiNixfYjb1w==}
@@ -4482,15 +4682,15 @@ packages:
'@types/simple-oauth2@5.0.7':
resolution: {integrity: sha512-8JbWVJbiTSBQP/7eiyGKyXWAqp3dKQZpaA+pdW16FCi32ujkzRMG8JfjoAzdWt6W8U591ZNdHcPtP2D7ILTKuA==}
- '@types/sinon@17.0.3':
- resolution: {integrity: sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==}
+ '@types/sinon@17.0.4':
+ resolution: {integrity: sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==}
+
+ '@types/sinonjs__fake-timers@15.0.1':
+ resolution: {integrity: sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w==}
'@types/sinonjs__fake-timers@8.1.1':
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
- '@types/sinonjs__fake-timers@8.1.5':
- resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==}
-
'@types/sizzle@2.3.10':
resolution: {integrity: sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==}
@@ -4515,11 +4715,8 @@ packages:
'@types/tmp@0.2.6':
resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==}
- '@types/tough-cookie@4.0.5':
- resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
-
- '@types/unist@3.0.2':
- resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@types/uuid@9.0.8':
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
@@ -4539,89 +4736,89 @@ packages:
'@types/ws@8.18.1':
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
- '@types/yargs-parser@21.0.0':
- resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- '@types/yargs@17.0.33':
- resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+ '@types/yargs@17.0.34':
+ resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==}
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
- '@typescript-eslint/eslint-plugin@8.46.1':
- resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==}
+ '@typescript-eslint/eslint-plugin@8.47.0':
+ resolution: {integrity: sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.46.1
+ '@typescript-eslint/parser': ^8.47.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.46.1':
- resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==}
+ '@typescript-eslint/parser@8.47.0':
+ resolution: {integrity: sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.46.1':
- resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==}
+ '@typescript-eslint/project-service@8.47.0':
+ resolution: {integrity: sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.46.1':
- resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==}
+ '@typescript-eslint/scope-manager@8.47.0':
+ resolution: {integrity: sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.46.1':
- resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==}
+ '@typescript-eslint/tsconfig-utils@8.47.0':
+ resolution: {integrity: sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.46.1':
- resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==}
+ '@typescript-eslint/type-utils@8.47.0':
+ resolution: {integrity: sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.46.1':
- resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==}
+ '@typescript-eslint/types@8.47.0':
+ resolution: {integrity: sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.46.1':
- resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==}
+ '@typescript-eslint/typescript-estree@8.47.0':
+ resolution: {integrity: sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.46.1':
- resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==}
+ '@typescript-eslint/utils@8.47.0':
+ resolution: {integrity: sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.46.1':
- resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==}
+ '@typescript-eslint/visitor-keys@8.47.0':
+ resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@ungap/structured-clone@1.2.0':
- resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@vitejs/plugin-vue@6.0.1':
- resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==}
+ '@vitejs/plugin-vue@6.0.2':
+ resolution: {integrity: sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@vitest/coverage-v8@3.2.4':
- resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
+ '@vitest/coverage-v8@4.0.13':
+ resolution: {integrity: sha512-w77N6bmtJ3CFnL/YHiYotwW/JI3oDlR3K38WEIqegRfdMSScaYxwYKB/0jSNpOTZzUjQkG8HHEz4sdWQMWpQ5g==}
peerDependencies:
- '@vitest/browser': 3.2.4
- vitest: 3.2.4
+ '@vitest/browser': 4.0.13
+ vitest: 4.0.13
peerDependenciesMeta:
'@vitest/browser':
optional: true
@@ -4632,6 +4829,9 @@ packages:
'@vitest/expect@3.2.4':
resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+ '@vitest/expect@4.0.13':
+ resolution: {integrity: sha512-zYtcnNIBm6yS7Gpr7nFTmq8ncowlMdOJkWLqYvhr/zweY6tFbDkDi8BPPOeHxEtK1rSI69H7Fd4+1sqvEGli6w==}
+
'@vitest/mocker@3.2.4':
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
peerDependencies:
@@ -4643,20 +4843,34 @@ packages:
vite:
optional: true
+ '@vitest/mocker@4.0.13':
+ resolution: {integrity: sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/pretty-format@2.0.5':
resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
- '@vitest/pretty-format@2.1.1':
- resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==}
+ '@vitest/pretty-format@2.1.9':
+ resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
'@vitest/pretty-format@3.2.4':
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
- '@vitest/runner@3.2.4':
- resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+ '@vitest/pretty-format@4.0.13':
+ resolution: {integrity: sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==}
- '@vitest/snapshot@3.2.4':
- resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+ '@vitest/runner@4.0.13':
+ resolution: {integrity: sha512-9IKlAru58wcVaWy7hz6qWPb2QzJTKt+IOVKjAx5vb5rzEFPTL6H4/R9BMvjZ2ppkxKgTrFONEJFtzvnyEpiT+A==}
+
+ '@vitest/snapshot@4.0.13':
+ resolution: {integrity: sha512-hb7Usvyika1huG6G6l191qu1urNPsq1iFc2hmdzQY3F5/rTgqQnwwplyf8zoYHkpt7H6rw5UfIw6i/3qf9oSxQ==}
'@vitest/spy@2.0.5':
resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
@@ -4664,15 +4878,21 @@ packages:
'@vitest/spy@3.2.4':
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+ '@vitest/spy@4.0.13':
+ resolution: {integrity: sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==}
+
'@vitest/utils@2.0.5':
resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
- '@vitest/utils@2.1.1':
- resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==}
+ '@vitest/utils@2.1.9':
+ resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
'@vitest/utils@3.2.4':
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+ '@vitest/utils@4.0.13':
+ resolution: {integrity: sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==}
+
'@volar/language-core@2.4.15':
resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
@@ -4691,17 +4911,17 @@ packages:
'@volar/typescript@2.4.23':
resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
- '@vue/compiler-core@3.5.22':
- resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
+ '@vue/compiler-core@3.5.24':
+ resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==}
- '@vue/compiler-dom@3.5.22':
- resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
+ '@vue/compiler-dom@3.5.24':
+ resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==}
- '@vue/compiler-sfc@3.5.22':
- resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==}
+ '@vue/compiler-sfc@3.5.24':
+ resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==}
- '@vue/compiler-ssr@3.5.22':
- resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==}
+ '@vue/compiler-ssr@3.5.24':
+ resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==}
'@vue/compiler-vue2@2.7.16':
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
@@ -4714,86 +4934,88 @@ packages:
typescript:
optional: true
- '@vue/language-core@3.1.1':
- resolution: {integrity: sha512-qjMY3Q+hUCjdH+jLrQapqgpsJ0rd/2mAY02lZoHG3VFJZZZKLjAlV+Oo9QmWIT4jh8+Rx8RUGUi++d7T9Wb6Mw==}
+ '@vue/language-core@3.1.5':
+ resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@vue/reactivity@3.5.22':
- resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==}
+ '@vue/reactivity@3.5.24':
+ resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==}
- '@vue/runtime-core@3.5.22':
- resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==}
+ '@vue/runtime-core@3.5.24':
+ resolution: {integrity: sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==}
- '@vue/runtime-dom@3.5.22':
- resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==}
+ '@vue/runtime-dom@3.5.24':
+ resolution: {integrity: sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==}
- '@vue/server-renderer@3.5.22':
- resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==}
+ '@vue/server-renderer@3.5.24':
+ resolution: {integrity: sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==}
peerDependencies:
- vue: 3.5.22
+ vue: 3.5.24
- '@vue/shared@3.5.22':
- resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==}
+ '@vue/shared@3.5.24':
+ resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
- '@vue/test-utils@2.4.1':
- resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==}
- peerDependencies:
- '@vue/server-renderer': ^3.0.1
- vue: ^3.0.1
- peerDependenciesMeta:
- '@vue/server-renderer':
- optional: true
+ '@vue/test-utils@2.4.6':
+ resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
'@webgpu/types@0.1.38':
resolution: {integrity: sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==}
- '@xhmikosr/archive-type@7.0.0':
- resolution: {integrity: sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==}
- engines: {node: ^14.14.0 || >=16.0.0}
-
- '@xhmikosr/bin-check@7.0.3':
- resolution: {integrity: sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==}
+ '@xhmikosr/archive-type@7.1.0':
+ resolution: {integrity: sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg==}
engines: {node: '>=18'}
- '@xhmikosr/bin-wrapper@13.0.5':
- resolution: {integrity: sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==}
+ '@xhmikosr/bin-check@7.1.0':
+ resolution: {integrity: sha512-y1O95J4mnl+6MpVmKfMYXec17hMEwE/yeCglFNdx+QvLLtP0yN4rSYcbkXnth+lElBuKKek2NbvOfOGPpUXCvw==}
engines: {node: '>=18'}
- '@xhmikosr/decompress-tar@8.0.1':
- resolution: {integrity: sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg==}
+ '@xhmikosr/bin-wrapper@13.2.0':
+ resolution: {integrity: sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw==}
engines: {node: '>=18'}
- '@xhmikosr/decompress-tarbz2@8.0.2':
- resolution: {integrity: sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ==}
+ '@xhmikosr/decompress-tar@8.1.0':
+ resolution: {integrity: sha512-m0q8x6lwxenh1CrsTby0Jrjq4vzW/QU1OLhTHMQLEdHpmjR1lgahGz++seZI0bXF3XcZw3U3xHfqZSz+JPP2Gg==}
engines: {node: '>=18'}
- '@xhmikosr/decompress-targz@8.0.1':
- resolution: {integrity: sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg==}
+ '@xhmikosr/decompress-tarbz2@8.1.0':
+ resolution: {integrity: sha512-aCLfr3A/FWZnOu5eqnJfme1Z1aumai/WRw55pCvBP+hCGnTFrcpsuiaVN5zmWTR53a8umxncY2JuYsD42QQEbw==}
engines: {node: '>=18'}
- '@xhmikosr/decompress-unzip@7.0.0':
- resolution: {integrity: sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ==}
+ '@xhmikosr/decompress-targz@8.1.0':
+ resolution: {integrity: sha512-fhClQ2wTmzxzdz2OhSQNo9ExefrAagw93qaG1YggoIz/QpI7atSRa7eOHv4JZkpHWs91XNn8Hry3CwUlBQhfPA==}
engines: {node: '>=18'}
- '@xhmikosr/decompress@10.0.1':
- resolution: {integrity: sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==}
+ '@xhmikosr/decompress-unzip@7.1.0':
+ resolution: {integrity: sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA==}
engines: {node: '>=18'}
- '@xhmikosr/downloader@15.0.1':
- resolution: {integrity: sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g==}
+ '@xhmikosr/decompress@10.2.0':
+ resolution: {integrity: sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==}
+ engines: {node: '>=18'}
+
+ '@xhmikosr/downloader@15.2.0':
+ resolution: {integrity: sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g==}
engines: {node: '>=18'}
'@xhmikosr/os-filter-obj@3.0.0':
resolution: {integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==}
engines: {node: ^14.14.0 || >=16.0.0}
+ '@xmldom/xmldom@0.9.8':
+ resolution: {integrity: sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==}
+ engines: {node: '>=14.6'}
+
abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+ abbrev@2.0.0:
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
abbrev@3.0.1:
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -4809,6 +5031,10 @@ packages:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
@@ -4829,9 +5055,9 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
- adm-zip@0.5.10:
- resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==}
- engines: {node: '>=6.0'}
+ adm-zip@0.5.16:
+ resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+ engines: {node: '>=12.0'}
agent-base@4.3.0:
resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==}
@@ -4841,18 +5067,14 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
- agent-base@7.1.3:
- resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
aggregate-error@3.1.0:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
- aggregate-error@5.0.0:
- resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==}
- engines: {node: '>=18'}
-
aiscript-vscode@https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7:
resolution: {tarball: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7}
version: 0.1.15
@@ -4889,8 +5111,8 @@ packages:
alien-signals@1.0.13:
resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
- alien-signals@3.0.0:
- resolution: {integrity: sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==}
+ alien-signals@3.1.0:
+ resolution: {integrity: sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==}
analytics-utils@1.1.1:
resolution: {integrity: sha512-nRybjTpRAcHVhWb1cvYaOLJaI3R79r8XjMbu5c0wd2jKmANNqSrYwybiU0X3mp+CQQdm4YiAggTXb2cIA8XhUg==}
@@ -4924,17 +5146,14 @@ packages:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
ansis@3.17.0:
resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==}
engines: {node: '>=14'}
- any-promise@1.3.0:
- resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
app-root-path@3.1.0:
resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==}
engines: {node: '>= 6.0.0'}
@@ -4942,8 +5161,8 @@ packages:
append-field@1.0.0:
resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==}
- aproba@2.0.0:
- resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+ aproba@2.1.0:
+ resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==}
arch@2.2.0:
resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
@@ -5027,12 +5246,12 @@ packages:
asn1@0.2.6:
resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
- asn1js@3.0.5:
- resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==}
+ asn1js@3.0.6:
+ resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==}
engines: {node: '>=12.0.0'}
- assert-never@1.2.1:
- resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
+ assert-never@1.4.0:
+ resolution: {integrity: sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==}
assert-plus@1.0.0:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
@@ -5046,8 +5265,8 @@ packages:
resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
engines: {node: '>=4'}
- ast-v8-to-istanbul@0.3.3:
- resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==}
+ ast-v8-to-istanbul@0.3.8:
+ resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==}
astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
@@ -5067,8 +5286,8 @@ packages:
async@0.2.10:
resolution: {integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==}
- async@3.2.4:
- resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -5085,8 +5304,8 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- avvio@9.0.0:
- resolution: {integrity: sha512-UbYrOXgE/I+knFG+3kJr9AgC7uNo8DG+FGGODpH9Bj1O1kL/QDjBXnTem9leD3VdQKtaHjV3O85DQ7hHh4IIHw==}
+ avvio@9.1.0:
+ resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==}
aws-sdk-client-mock@4.1.0:
resolution: {integrity: sha512-h/tOYTkXEsAcV3//6C1/7U4ifSpKyJvb6auveAepqqNJl6TdZaPFEtKjBQNf8UxQdDP850knB2i/whq4zlsxJw==}
@@ -5100,11 +5319,16 @@ packages:
axios@0.24.0:
resolution: {integrity: sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==}
- axios@1.12.2:
- resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==}
+ axios@1.13.2:
+ resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
- b4a@1.6.4:
- resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==}
+ b4a@1.7.3:
+ resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
+ peerDependencies:
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
babel-walk@3.0.0-canary-5:
resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
@@ -5116,22 +5340,30 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ bare-events@2.8.1:
+ resolution: {integrity: sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.8.10:
- resolution: {integrity: sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==}
+ baseline-browser-mapping@2.8.29:
+ resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==}
hasBin: true
bcrypt-pbkdf@1.0.2:
resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
- bcryptjs@2.4.3:
- resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==}
+ bcryptjs@3.0.3:
+ resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==}
+ hasBin: true
- better-opn@3.0.2:
- resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
- engines: {node: '>=12.0.0'}
+ bidi-js@1.0.3:
+ resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
bin-version-check@5.1.0:
resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==}
@@ -5141,9 +5373,6 @@ packages:
resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==}
engines: {node: '>=12'}
- bl@4.1.0:
- resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
-
blob-util@2.0.2:
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
@@ -5153,34 +5382,38 @@ packages:
blurhash@2.0.5:
resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==}
- bn.js@4.12.0:
- resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
+ bn.js@4.12.2:
+ resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==}
body-parser@1.20.3:
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ body-parser@2.2.0:
+ resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+ engines: {node: '>=18'}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
bowser@2.12.1:
resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==}
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- broadcast-channel@7.1.0:
- resolution: {integrity: sha512-InJljddsYWbEL8LBnopnCg+qMQp9KcowvYWOt4YWrjD5HmxzDYKdVbDS1w/ji5rFZdRD58V5UxJPtBdpEbEJYw==}
+ broadcast-channel@7.2.0:
+ resolution: {integrity: sha512-JgraikEriG/TxBUi2W/w2O0jhHjXZUtXAvCZH0Yr3whjxYVgAg0hSe6r/teM+I5H5Q/q6RhyuKdC2pHNlFyepQ==}
- browserslist@4.26.3:
- resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
+ browserslist@4.28.0:
+ resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -5210,8 +5443,8 @@ packages:
resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
engines: {node: '>=6.14.2'}
- bullmq@5.61.0:
- resolution: {integrity: sha512-khaTjc1JnzaYFl4FrUtsSsqugAW/urRrcZ9Q0ZE+REAw8W+gkHFqxbGlutOu6q7j7n91wibVaaNlOUMdiEvoSQ==}
+ bullmq@5.64.1:
+ resolution: {integrity: sha512-Tg4ORit8bQ1xLwcQrEfcDpG50pS30Onuz1ZA4rPLbL9QEsOaBbvFQMSEvXSgMnvRZRqDggJoSBGz9tck+1PixQ==}
buraha@0.0.1:
resolution: {integrity: sha512-G563A0mTbzknm2jDaNxfZuNKIdeArs8T+XQN6t+KbmgnOoevXSXhKDkyf8Md/36Jrx99ikwbCag37VGe3myExQ==}
@@ -5220,14 +5453,14 @@ packages:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
+ byte-counter@0.1.0:
+ resolution: {integrity: sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==}
+ engines: {node: '>=20'}
+
bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
-
cacache@19.0.1:
resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -5240,8 +5473,8 @@ packages:
resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
engines: {node: '>=14.16'}
- cacheable-request@13.0.12:
- resolution: {integrity: sha512-qqK/etGeI/9DV5yRkO50ApDTjip9UXPml1NHYJksUAw15yMLOf8VUO1/8bu4P8birOCqR+hYQ/nh1Lezc8sZrA==}
+ cacheable-request@13.0.15:
+ resolution: {integrity: sha512-NjiSrjv37X73FmGGU5ec/M83vWQ6q1Ae3BFe+ABfdeeMy4LOMKYTpfEjrBnLedu43clKZtsYbKrHTIQE7vKq+A==}
engines: {node: '>=18'}
cachedir@2.4.0:
@@ -5275,25 +5508,22 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
- caniuse-lite@1.0.30001746:
- resolution: {integrity: sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==}
+ caniuse-lite@1.0.30001755:
+ resolution: {integrity: sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==}
- canonicalize@1.0.8:
- resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==}
+ canonicalize@2.1.0:
+ resolution: {integrity: sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==}
+ hasBin: true
- canvas-confetti@1.9.3:
- resolution: {integrity: sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==}
-
- canvas@3.1.0:
- resolution: {integrity: sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==}
- engines: {node: ^18.12.0 || >= 20.9.0}
+ canvas-confetti@1.9.4:
+ resolution: {integrity: sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==}
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
- cbor@9.0.2:
- resolution: {integrity: sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==}
- engines: {node: '>=16'}
+ cbor@10.0.11:
+ resolution: {integrity: sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==}
+ engines: {node: '>=20'}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -5302,6 +5532,10 @@ packages:
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
engines: {node: '>=18'}
+ chai@6.2.1:
+ resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
+ engines: {node: '>=18'}
+
chalk-template@1.1.2:
resolution: {integrity: sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==}
engines: {node: '>=14.16'}
@@ -5385,9 +5619,6 @@ packages:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
- chownr@1.1.4:
- resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-
chownr@2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
@@ -5396,8 +5627,8 @@ packages:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
- chromatic@13.3.0:
- resolution: {integrity: sha512-OtXVKSFqGS1x6E6xYzmYX2iImSknbvo5CfTxP3ztFvXQhIAwhJzJuA3XpnIewER9gtWUNnV2DDi8/f9JyZJSfg==}
+ chromatic@13.3.4:
+ resolution: {integrity: sha512-TR5rvyH0ESXobBB3bV8jc87AEAFQC7/n+Eb4XWhJz6hW3YNxIQPVjcbgLv+a4oKHEl1dUBueWSoIQsOVGTd+RQ==}
hasBin: true
peerDependencies:
'@chromatic-com/cypress': ^0.*.* || ^1.0.0
@@ -5412,30 +5643,21 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
- ci-info@4.3.0:
- resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==}
+ ci-info@4.3.1:
+ resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
engines: {node: '>=8'}
- cjs-module-lexer@1.2.2:
- resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==}
+ cjs-module-lexer@1.4.3:
+ resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
- clean-stack@5.2.0:
- resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==}
- engines: {node: '>=14.16'}
-
cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
- cli-highlight@2.1.11:
- resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==}
- engines: {node: '>=8.0.0', npm: '>=5.0.0'}
- hasBin: true
-
cli-table3@0.6.1:
resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==}
engines: {node: 10.* || >= 12.*}
@@ -5458,6 +5680,10 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ cliui@9.0.1:
+ resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+ engines: {node: '>=20'}
+
cluster-key-slot@1.1.2:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
@@ -5466,9 +5692,17 @@ packages:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
+ color-convert@3.1.3:
+ resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==}
+ engines: {node: '>=14.6'}
+
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ color-name@2.1.0:
+ resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==}
+ engines: {node: '>=12.20'}
+
color-string@1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
@@ -5551,8 +5785,8 @@ packages:
config-chain@1.1.13:
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
- consola@3.4.0:
- resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
console-control-strings@1.1.0:
@@ -5565,6 +5799,10 @@ packages:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
+ content-disposition@1.0.1:
+ resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==}
+ engines: {node: '>=18'}
+
content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
@@ -5575,9 +5813,9 @@ packages:
cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
- cookie@0.6.0:
- resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
- engines: {node: '>= 0.6'}
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
cookie@0.7.1:
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
@@ -5616,28 +5854,20 @@ packages:
resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
engines: {node: '>=12.0.0'}
- cropperjs@2.0.1:
- resolution: {integrity: sha512-hiJwk2SCPZqxMA7aR3byzLpYUqOrQo+ihMk8k/WRm/xe/LX8wNzAIzMwEB/NEGJYA6sbewxW9TUlrRUYi/2Ipg==}
+ cropperjs@2.1.0:
+ resolution: {integrity: sha512-SsSDqdVRl+mjbIBkGWlk1gCGcc+HzBqCbH5EQ+1tkAFUdxq2KUGukXF1RqhmvXrrdrX7PDwSUkWgXS7E36KvGQ==}
cross-env@10.1.0:
resolution: {integrity: sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==}
engines: {node: '>=20'}
hasBin: true
- cross-env@7.0.3:
- resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
- engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
- hasBin: true
-
- cross-fetch@4.1.0:
- resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==}
-
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
- css-declaration-sorter@7.2.0:
- resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
+ css-declaration-sorter@7.3.0:
+ resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.0.9
@@ -5665,8 +5895,8 @@ packages:
engines: {node: '>=4'}
hasBin: true
- cssnano-preset-default@7.0.9:
- resolution: {integrity: sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==}
+ cssnano-preset-default@7.0.10:
+ resolution: {integrity: sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5677,8 +5907,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- cssnano@7.1.1:
- resolution: {integrity: sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==}
+ cssnano@7.1.2:
+ resolution: {integrity: sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5687,15 +5917,15 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- cssstyle@4.2.1:
- resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==}
- engines: {node: '>=18'}
+ cssstyle@5.3.3:
+ resolution: {integrity: sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==}
+ engines: {node: '>=20'}
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- cypress@15.4.0:
- resolution: {integrity: sha512-+GC/Y/LXAcaMCzfuM7vRx5okRmonceZbr0ORUAoOrZt/5n2eGK8yh04bok1bWSjZ32wRHrZESqkswQ6biArN5w==}
+ cypress@15.7.0:
+ resolution: {integrity: sha512-1C81zKxnQckYm2XGi37rPV4rN0bzUoWhydhKdOyshJn5gJKszEx5as9VLSZI0jp0ye49QxmnbU4TtMpcD+OmGQ==}
engines: {node: ^20.1.0 || ^22.0.0 || >=24.0.0}
hasBin: true
@@ -5703,13 +5933,13 @@ packages:
resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
engines: {node: '>=0.10'}
- data-uri-to-buffer@4.0.0:
- resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
- data-urls@5.0.0:
- resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
- engines: {node: '>=18'}
+ data-urls@6.0.0:
+ resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==}
+ engines: {node: '>=20'}
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
@@ -5723,15 +5953,11 @@ packages:
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
engines: {node: '>= 0.4'}
- date-fns@2.30.0:
- resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
- engines: {node: '>=0.11'}
-
date-fns@4.1.0:
resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
- dayjs@1.11.18:
- resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
+ dayjs@1.11.19:
+ resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
@@ -5769,8 +5995,8 @@ packages:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
- decimal.js@10.5.0:
- resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
decode-bmp@0.2.1:
resolution: {integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==}
@@ -5780,15 +6006,19 @@ packages:
resolution: {integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==}
engines: {node: '>=8.6'}
- decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+ decode-named-character-reference@1.2.0:
+ resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+
+ decompress-response@10.0.0:
+ resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==}
+ engines: {node: '>=20'}
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
- dedent@1.6.0:
- resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==}
+ dedent@1.7.0:
+ resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
@@ -5802,23 +6032,20 @@ packages:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
- deep-equal@2.2.0:
- resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==}
-
- deep-extend@0.6.0:
- resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
- engines: {node: '>=4.0.0'}
+ deep-equal@2.2.3:
+ resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
+ engines: {node: '>= 0.4'}
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- deepmerge@4.2.2:
- resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- defaults@3.0.0:
- resolution: {integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==}
- engines: {node: '>=18'}
+ defaults@2.0.2:
+ resolution: {integrity: sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==}
+ engines: {node: '>=16'}
defer-to-connect@2.0.1:
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
@@ -5828,10 +6055,6 @@ packages:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
- define-lazy-prop@2.0.0:
- resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
- engines: {node: '>=8'}
-
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -5864,8 +6087,8 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
- detect-libc@2.1.1:
- resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
devlop@1.1.0:
@@ -5885,8 +6108,12 @@ packages:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
- dijkstrajs@1.0.2:
- resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==}
+ diff@8.0.2:
+ resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
+ engines: {node: '>=0.3.1'}
+
+ dijkstrajs@1.0.3:
+ resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
@@ -5942,8 +6169,8 @@ packages:
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
- dotenv@16.4.7:
- resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
+ dotenv@16.6.1:
+ resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
dunder-proto@1.0.1:
@@ -5970,8 +6197,11 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.228:
- resolution: {integrity: sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==}
+ electron-to-chromium@1.5.255:
+ resolution: {integrity: sha512-Z9oIp4HrFF/cZkDPMpz2XSuVpc1THDpT4dlmATFlJUIBVCy9Vap5/rIXsASP1CscBacBqhabwh8vLctqBwEerQ==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -5979,6 +6209,10 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ empathic@2.0.0:
+ resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
+ engines: {node: '>=14'}
+
encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
@@ -6022,8 +6256,8 @@ packages:
err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
- error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
es-abstract@1.24.0:
resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
@@ -6059,8 +6293,8 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
- es-toolkit@1.27.0:
- resolution: {integrity: sha512-ETSFA+ZJArcuSCpzD2TjAy6UHpx4E4uqFsoDg9F/nTLogrLmVVZQ+zNxco5h7cWnA1nNak07IXsLcaSMih+ZPQ==}
+ es-toolkit@1.42.0:
+ resolution: {integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==}
es6-promise@4.2.8:
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
@@ -6068,13 +6302,13 @@ packages:
es6-promisify@5.0.0:
resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
- esbuild-register@3.6.0:
- resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
- peerDependencies:
- esbuild: '>=0.12 <1'
+ esbuild@0.25.11:
+ resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
+ engines: {node: '>=18'}
+ hasBin: true
- esbuild@0.25.10:
- resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
+ esbuild@0.27.0:
+ resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==}
engines: {node: '>=18'}
hasBin: true
@@ -6142,8 +6376,8 @@ packages:
'@typescript-eslint/parser':
optional: true
- eslint-plugin-vue@10.5.0:
- resolution: {integrity: sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==}
+ eslint-plugin-vue@10.6.0:
+ resolution: {integrity: sha512-TsoFluWxOpsJlE/l2jJygLQLWBPJ3Qdkesv7tBIunICbTcG0dS1/NBw/Ol4tJw5kHWlAVds4lUmC29/vlPUcEQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
@@ -6171,8 +6405,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.37.0:
- resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==}
+ eslint@9.39.1:
+ resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -6235,6 +6469,9 @@ packages:
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ events-universal@1.0.1:
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
+
events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
@@ -6251,10 +6488,6 @@ packages:
resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
-
execa@9.6.0:
resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==}
engines: {node: ^18.19.0 || >=20.5.0}
@@ -6263,21 +6496,24 @@ packages:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
- expand-template@2.0.3:
- resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
- engines: {node: '>=6'}
+ exifreader@4.32.0:
+ resolution: {integrity: sha512-sj1PzjpaPwSE/2MeUqoAYcfc2u7AZOGSby0FzmAkB4jjeCXgDryxzVgMwV+tJKGIkGdWkkWiUWoLSJoPHJ6V5Q==}
- expect-type@1.2.1:
- resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
+ expect-type@1.2.2:
+ resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
engines: {node: '>=12.0.0'}
- exponential-backoff@3.1.1:
- resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+ exponential-backoff@3.1.3:
+ resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
express@4.21.2:
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
engines: {node: '>= 0.10.0'}
+ express@5.1.0:
+ resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
+ engines: {node: '>= 18'}
+
ext-list@2.2.2:
resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
engines: {node: '>=0.10.0'}
@@ -6298,8 +6534,8 @@ packages:
resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
engines: {'0': node >=0.6.0}
- fast-content-type-parse@2.0.0:
- resolution: {integrity: sha512-fCqg/6Sps8tqk8p+kqyKqYfOF0VjPNYrqpLiqNl0RBKmD80B080AJWVV6EkSkscjToNExcXg1+Mfzftrx6+iSA==}
+ fast-content-type-parse@3.0.0:
+ resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==}
fast-decode-uri-component@1.0.1:
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
@@ -6307,8 +6543,8 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-fifo@1.3.0:
- resolution: {integrity: sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==}
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
@@ -6317,8 +6553,8 @@ packages:
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- fast-json-stringify@6.0.0:
- resolution: {integrity: sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==}
+ fast-json-stringify@6.1.1:
+ resolution: {integrity: sha512-DbgptncYEXZqDUOEl4krff4mUiVrTZZVI7BBrQR/T3BqMj/eM1flTC1Uk2uUoLcWCxjT95xKulV/Lc6hhOZsBQ==}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
@@ -6326,42 +6562,28 @@ packages:
fast-querystring@1.1.2:
resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
- fast-redact@3.1.2:
- resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==}
- engines: {node: '>=6'}
-
fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
- fast-uri@2.4.0:
- resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==}
-
- fast-uri@3.0.1:
- resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==}
-
- fast-xml-parser@4.5.0:
- resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==}
- hasBin: true
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
fast-xml-parser@5.2.5:
resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
hasBin: true
- fastify-plugin@4.5.1:
- resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==}
-
- fastify-plugin@5.0.0:
- resolution: {integrity: sha512-0725fmH/yYi8ugsjszLci+lLnGBK6cG+WSxM7edY2OXJEU7gr2JiGBoieL2h9mhTych1vFsEfXsAsGGDJ/Rd5w==}
+ fastify-plugin@5.1.0:
+ resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==}
fastify-raw-body@5.0.0:
resolution: {integrity: sha512-2qfoaQ3BQDhZ1gtbkKZd6n0kKxJISJGM6u/skD9ljdWItAscjXrtZ1lnjr7PavmXX9j4EyCPmBDiIsLn07d5vA==}
engines: {node: '>= 10'}
- fastify@5.6.1:
- resolution: {integrity: sha512-WjjlOciBF0K8pDUPZoGPhqhKrQJ02I8DKaDIfO51EL0kbSMwQFl85cRwhOvmSDWoukNOdTo27gLN549pLCcH7Q==}
+ fastify@5.6.2:
+ resolution: {integrity: sha512-dPugdGnsvYkBlENLhCgX8yhyGCsCPrpA8lFWbTNU428l+YOnLgYHR69hzV8HWPC79n536EqzqQtvhtdaCE0dKg==}
- fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
fd-slicer@1.1.0:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
@@ -6375,9 +6597,9 @@ packages:
picomatch:
optional: true
- feed@4.2.2:
- resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==}
- engines: {node: '>=0.4.0'}
+ feed@5.1.0:
+ resolution: {integrity: sha512-qGNhgYygnefSkAHHrNHqC7p3R8J0/xQDS/cYUud8er/qD9EFGWyCdUDfULHTJQN1d3H3WprzVwMc9MfB4J50Wg==}
+ engines: {node: '>=20', pnpm: '>=10'}
fetch-blob@3.2.0:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
@@ -6398,12 +6620,16 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
- file-type@19.6.0:
- resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==}
+ file-type@20.5.0:
+ resolution: {integrity: sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==}
engines: {node: '>=18'}
- file-type@21.0.0:
- resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==}
+ file-type@21.1.0:
+ resolution: {integrity: sha512-boU4EHmP3JXkwDo4uhyBhTt5pPstxB6eEXKJBu2yu2l7aAMMm7QQYQEzssJmKReZYrFdFOJS8koVo6bXIBGDqA==}
+ engines: {node: '>=20'}
+
+ file-type@21.1.1:
+ resolution: {integrity: sha512-ifJXo8zUqbQ/bLbl9sFoqHNTNWbnPY1COImFfM6CCy7z+E+jC1eY9YfOKkx0fckIg+VljAy2/87T61fp0+eEkg==}
engines: {node: '>=20'}
filename-reserved-regex@3.0.0:
@@ -6422,12 +6648,13 @@ packages:
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
engines: {node: '>= 0.8'}
- find-my-way@9.0.1:
- resolution: {integrity: sha512-/5NN/R0pFWuff16TMajeKt2JyiW+/OE8nOO8vo1DwZTxLaIURb7lcBYPIgRPh61yCNh9l8voeKwcrkUzmB00vw==}
- engines: {node: '>=14'}
+ finalhandler@2.1.0:
+ resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
+ engines: {node: '>= 0.8'}
- find-package-json@1.2.0:
- resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==}
+ find-my-way@9.3.0:
+ resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==}
+ engines: {node: '>=20'}
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
@@ -6437,17 +6664,13 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- find-up@7.0.0:
- resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
- engines: {node: '>=18'}
-
find-versions@5.1.0:
resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==}
engines: {node: '>=12'}
- fkill@9.0.0:
- resolution: {integrity: sha512-MdYSsbdCaIRjzo5edthZtWmEZVMfr1qrtYZUHIdO3swCE+CoZA8S5l0s4jDsYlTa9ZiXv0pTgpzE7s4N8NeUOA==}
- engines: {node: '>=18'}
+ fkill@10.0.1:
+ resolution: {integrity: sha512-ecaskrAMoRXdtrGEQI/NyEJ3ZoZrMUVPb3EPNMrSqP/Tb08ZN22KqMJN24cDgNJ+ddkQR8W6cJRMvF9+nnZg6A==}
+ engines: {node: '>=20'}
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
@@ -6461,8 +6684,8 @@ packages:
engines: {node: '>=18'}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
- follow-redirects@1.15.9:
- resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
@@ -6485,12 +6708,12 @@ packages:
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
engines: {node: '>= 14.17'}
- form-data-encoder@4.0.2:
- resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==}
+ form-data-encoder@4.1.0:
+ resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==}
engines: {node: '>= 18'}
- form-data@4.0.4:
- resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
formdata-polyfill@4.0.10:
@@ -6512,12 +6735,13 @@ packages:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
from@0.1.7:
resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
- fs-constants@1.0.0:
- resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-
fs-extra@11.3.2:
resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'}
@@ -6561,6 +6785,10 @@ packages:
engines: {node: '>=10'}
deprecated: This package is no longer supported.
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -6569,6 +6797,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
+ engines: {node: '>=18'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -6585,10 +6817,6 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
-
get-stream@9.0.1:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
@@ -6597,15 +6825,12 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
- get-tsconfig@4.10.1:
- resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
+ get-tsconfig@4.13.0:
+ resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
getpass@0.1.7:
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
- github-from-package@0.0.0:
- resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
-
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -6614,24 +6839,23 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
hasBin: true
- glob@11.0.3:
- resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
+ glob@11.1.0:
+ resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==}
engines: {node: 20 || >=22}
hasBin: true
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
+ engines: {node: 20 || >=22}
+
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
- glob@8.1.0:
- resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
- engines: {node: '>=12'}
- deprecated: Glob versions prior to v9 are no longer supported
-
global-dirs@3.0.1:
resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
engines: {node: '>=10'}
@@ -6640,8 +6864,8 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
- globals@16.4.0:
- resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
engines: {node: '>=18'}
globalthis@1.0.4:
@@ -6658,8 +6882,8 @@ packages:
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
- google-protobuf@3.21.2:
- resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==}
+ google-protobuf@3.21.4:
+ resolution: {integrity: sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==}
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
@@ -6669,8 +6893,8 @@ packages:
resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==}
engines: {node: '>=16'}
- got@14.5.0:
- resolution: {integrity: sha512-rZ8+ZMYz9yeTFmFtOiwf/Trcli8gdqgqAz0kmkEOWcT7C3BFG3Z+dLQu0y8je7RogG7Wp1obnu5GerwCaccftw==}
+ got@14.6.4:
+ resolution: {integrity: sha512-DjsLab39NUMf5iYlK9asVCkHMhaA2hEhrlmf+qXRhjEivuuBHWYbjmty9DA3OORUwZgENTB+6vSmY2ZW8gFHVw==}
engines: {node: '>=20'}
graceful-fs@4.2.11:
@@ -6679,16 +6903,16 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- graphql@16.11.0:
- resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
+ graphql@16.12.0:
+ resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
hammerjs@2.0.8:
resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
engines: {node: '>=0.8.0'}
- happy-dom@20.0.7:
- resolution: {integrity: sha512-CywLfzmYxP5OYpuAG0usFY0CpxJtwYR+w8Mms5J8W29Y2Pzf6rbfQS2M523tRZTb0oLA+URopPtnAQX2fupHZQ==}
+ happy-dom@20.0.10:
+ resolution: {integrity: sha512-6umCCHcjQrhP5oXhrHQQvLB0bwb1UzHAHdsXy+FjtKoYjUhmNZsQL8NivwM1vDvNEChJabVrUYxUnp/ZdYmy2g==}
engines: {node: '>=20.0.0'}
hard-rejection@2.1.0:
@@ -6698,8 +6922,9 @@ packages:
harfbuzzjs@0.4.13:
resolution: {integrity: sha512-EC0q1K9Axs2IhgzDcTlYSv0m/Xo3VU36BQXtRoUS/4eMpy0rsMHePHwIjHKdhaouVO5O03sfUOwHP6ZzZ3HwFA==}
- has-bigints@1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
@@ -6751,11 +6976,8 @@ packages:
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
- highlight.js@10.7.3:
- resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
-
- highlight.js@11.10.0:
- resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==}
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
hosted-git-info@2.8.9:
@@ -6782,18 +7004,14 @@ packages:
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
- htmlescape@1.1.1:
- resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==}
- engines: {node: '>=0.10'}
-
htmlparser2@10.0.0:
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
htmlparser2@5.0.1:
resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==}
- htmlparser2@8.0.1:
- resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==}
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
htmlparser2@9.1.0:
resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
@@ -6849,10 +7067,6 @@ packages:
resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==}
engines: {node: '>=12.20.0'}
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
-
human-signals@8.0.1:
resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
engines: {node: '>=18.18.0'}
@@ -6890,8 +7104,8 @@ packages:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
- immutable@5.0.3:
- resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==}
+ immutable@5.1.4:
+ resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==}
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
@@ -6912,12 +7126,8 @@ packages:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
- indent-string@5.0.0:
- resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
- engines: {node: '>=12'}
-
- index-to-position@1.1.0:
- resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==}
+ index-to-position@1.2.0:
+ resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==}
engines: {node: '>=18'}
inflight@1.0.6:
@@ -6950,14 +7160,19 @@ packages:
intersection-observer@0.12.2:
resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
+ deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019.
- ioredis@5.8.1:
- resolution: {integrity: sha512-Qho8TgIamqEPdgiMadJwzRMW3TudIg6vpg4YONokGDudy4eqRIJtDbVX72pfLBcWxvbn3qm/40TyGUObdW4tLQ==}
+ ioredis@5.8.2:
+ resolution: {integrity: sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==}
engines: {node: '>=12.22.0'}
ios-haptics@0.1.4:
resolution: {integrity: sha512-94FJcSuvmhe4mHTX4Uauj+/2yhs56m4BLkRScy1vNvkv7H1cSjsvfT+olc1sYOUqWlPhtVttAFBHex0cY9CE7Q==}
+ ip-address@10.0.1:
+ resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==}
+ engines: {node: '>= 12'}
+
ip-address@9.0.5:
resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
engines: {node: '>= 12'}
@@ -6982,8 +7197,8 @@ packages:
resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==}
engines: {node: '>=8'}
- is-arguments@1.1.1:
- resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
engines: {node: '>= 0.4'}
is-array-buffer@3.0.5:
@@ -6993,8 +7208,8 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- is-arrayish@0.3.2:
- resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
is-async-function@2.1.1:
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
@@ -7024,11 +7239,6 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
- is-docker@2.2.1:
- resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
- engines: {node: '>=8'}
- hasBin: true
-
is-expression@4.0.0:
resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==}
@@ -7047,8 +7257,8 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-generator-function@1.0.10:
- resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'}
is-glob@4.0.3:
@@ -7100,6 +7310,9 @@ packages:
is-promise@2.2.2:
resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -7128,9 +7341,9 @@ packages:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines: {node: '>= 0.4'}
- is-svg@5.1.0:
- resolution: {integrity: sha512-uVg5yifaTxHoefNf5Jcx+i9RZe2OBYd/UStp1umx+EERa4xGRa3LLGXjoEph43qUORC0qkafUgrXZ6zzK89yGA==}
- engines: {node: '>=14.16'}
+ is-svg@6.1.0:
+ resolution: {integrity: sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==}
+ engines: {node: '>=20'}
is-symbol@1.1.1:
resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
@@ -7163,10 +7376,6 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
- is-wsl@2.2.0:
- resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
- engines: {node: '>=8'}
-
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
@@ -7195,8 +7404,8 @@ packages:
resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
engines: {node: '>=10'}
- istanbul-reports@3.1.7:
- resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ istanbul-reports@3.2.0:
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
iterare@1.2.1:
@@ -7236,11 +7445,15 @@ packages:
resolution: {integrity: sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==}
engines: {node: '>= 20'}
- js-beautify@1.14.9:
- resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==}
- engines: {node: '>=12'}
+ js-beautify@1.15.4:
+ resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==}
+ engines: {node: '>=14'}
hasBin: true
+ js-cookie@3.0.5:
+ resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
+ engines: {node: '>=14'}
+
js-levenshtein@1.1.6:
resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==}
engines: {node: '>=0.10.0'}
@@ -7254,8 +7467,8 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
jsbn@0.1.1:
@@ -7268,9 +7481,9 @@ packages:
resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==}
engines: {node: '>=0.1.90'}
- jsdom@26.1.0:
- resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
- engines: {node: '>=18'}
+ jsdom@27.2.0:
+ resolution: {integrity: sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
peerDependencies:
canvas: ^3.0.0
peerDependenciesMeta:
@@ -7288,8 +7501,8 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- json-schema-ref-resolver@1.0.1:
- resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==}
+ json-schema-ref-resolver@3.0.0:
+ resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -7324,9 +7537,9 @@ packages:
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
- jsonld@8.3.3:
- resolution: {integrity: sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==}
- engines: {node: '>=14'}
+ jsonld@9.0.0:
+ resolution: {integrity: sha512-pjMIdkXfC1T2wrX9B9i2uXhGdyCmgec3qgMht+TDj+S0qX3bjWMQUfL7NeqEhuRTi8G5ESzmL9uGlST7nzSEWg==}
+ engines: {node: '>=18'}
jsonpointer@5.0.1:
resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
@@ -7354,8 +7567,8 @@ packages:
just-extend@6.2.0:
resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==}
- jwa@2.0.0:
- resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==}
+ jwa@2.0.1:
+ resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==}
jws@4.0.0:
resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
@@ -7363,26 +7576,16 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- keyv@5.5.3:
- resolution: {integrity: sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==}
+ keyv@5.5.4:
+ resolution: {integrity: sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- ky-universal@0.11.0:
- resolution: {integrity: sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==}
- engines: {node: '>=14.16'}
- peerDependencies:
- ky: '>=0.31.4'
- web-streams-polyfill: '>=3.2.1'
- peerDependenciesMeta:
- web-streams-polyfill:
- optional: true
-
- ky@0.33.3:
- resolution: {integrity: sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==}
- engines: {node: '>=14.16'}
+ ky@1.14.0:
+ resolution: {integrity: sha512-Rczb6FMM6JT0lvrOlP5WUOCB7s9XKxzwgErzhKlKde1bEV90FXplV1o87fpt4PU/asJFiqjYJxAJyzJhcrxOsQ==}
+ engines: {node: '>=18'}
lazy-ass@1.6.0:
resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==}
@@ -7400,8 +7603,8 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- light-my-request@6.0.0:
- resolution: {integrity: sha512-kFkFXrmKCL0EEeOmJybMH5amWFd+AFvlvMlvFTRxCUwbhfapZqDmeLMPoWihntnYY6JpoQDE9k+vOzObF1fDqg==}
+ light-my-request@6.6.0:
+ resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
@@ -7419,8 +7622,8 @@ packages:
enquirer:
optional: true
- load-esm@1.0.2:
- resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==}
+ load-esm@1.0.3:
+ resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==}
engines: {node: '>=13.2.0'}
load-tsconfig@0.2.5:
@@ -7435,17 +7638,9 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
lodash.defaults@4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
- lodash.get@4.4.2:
- resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
- deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
-
lodash.isarguments@3.1.0:
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
@@ -7488,8 +7683,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.0.0:
- resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==}
+ lru-cache@11.2.2:
+ resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -7503,19 +7698,19 @@ packages:
resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==}
engines: {node: '>=16.14'}
- luxon@3.3.0:
- resolution: {integrity: sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==}
+ luxon@3.7.2:
+ resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'}
lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
- magic-string@0.30.19:
- resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
- magicast@0.3.5:
- resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+ magicast@0.5.1:
+ resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==}
mailcheck@1.1.1:
resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==}
@@ -7546,8 +7741,8 @@ packages:
map-stream@0.1.0:
resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
- markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
@@ -7556,17 +7751,17 @@ packages:
matter-js@0.20.0:
resolution: {integrity: sha512-iC9fYR7zVT3HppNnsFsp9XOoQdQN2tUyfaKg4CHLH8bN+j6GT4Gw7IH2rP0tflAebrHFw730RR3DkVSZRX8hwA==}
- mdast-util-find-and-replace@3.0.1:
- resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
+ mdast-util-find-and-replace@3.0.2:
+ resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
- mdast-util-from-markdown@2.0.0:
- resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
+ mdast-util-from-markdown@2.0.2:
+ resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
- mdast-util-gfm-autolink-literal@2.0.0:
- resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
- mdast-util-gfm-footnote@2.0.0:
- resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
@@ -7577,8 +7772,8 @@ packages:
mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
- mdast-util-gfm@3.0.0:
- resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
@@ -7586,8 +7781,8 @@ packages:
mdast-util-to-hast@13.2.0:
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
- mdast-util-to-markdown@2.1.0:
- resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
@@ -7602,11 +7797,15 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- mediabunny@1.23.0:
- resolution: {integrity: sha512-mWdhhdRquePfTgZ+18DLCFWmqwO6oGP/YudmRU8Puh+whMUJ3VSb9KMAHPl2utim66ixKdZw+DbmdqBfBxRp0A==}
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
- meilisearch@0.53.0:
- resolution: {integrity: sha512-nG4VXbEOSzUmtbfsgOo+t6yX1ECEgXaT4hC0ap9MBpQGK5xwT+NWYDENYsKWR75cVaWaAqva+ok4zHlgtdXlLw==}
+ mediabunny@1.25.1:
+ resolution: {integrity: sha512-0Rrd47PMCVJbTPA7IJaXPCupV5/RZ/icgr+a0qExRJAr0n5vB4fsGSo+fdHIehG0CrddXtVRvNZwFtJz709yfA==}
+
+ meilisearch@0.54.0:
+ resolution: {integrity: sha512-b1bwJAEfj8C6hgSN88+/LvW3pe3nWC+thBS2seAbPZGakf/vzsLqppgZquiomzCr2GhU7U7H289625qhYe3rbw==}
memoizerific@1.11.3:
resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
@@ -7621,6 +7820,10 @@ packages:
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -7635,93 +7838,89 @@ packages:
mfm-js@0.25.0:
resolution: {integrity: sha512-JoK5TOtswXIvZSZ9hUEL+ZkcNV4onu/DtkaKeXK846+sJBBF8DvxYmPutt7nPaRDsUMmJGr64PNVMFpMGdk3hw==}
- microformats-parser@2.0.4:
- resolution: {integrity: sha512-DA2yt3uz2JjupBGoNvaG9ngBP5vSTI1ky2yhxBai/RnQrlzo+gEzuCdvwIIjj2nh3uVPDybTP5u7uua7pOa6LA==}
- engines: {node: '>=18'}
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
- micromark-core-commonmark@2.0.0:
- resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
- micromark-extension-gfm-autolink-literal@2.0.0:
- resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==}
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
- micromark-extension-gfm-footnote@2.0.0:
- resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==}
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
- micromark-extension-gfm-strikethrough@2.0.0:
- resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==}
-
- micromark-extension-gfm-table@2.0.0:
- resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==}
+ micromark-extension-gfm-table@2.1.1:
+ resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
- micromark-extension-gfm-task-list-item@2.0.1:
- resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==}
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
- micromark-factory-destination@2.0.0:
- resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
- micromark-factory-label@2.0.0:
- resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
- micromark-factory-space@2.0.0:
- resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
- micromark-factory-title@2.0.0:
- resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
- micromark-factory-whitespace@2.0.0:
- resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
- micromark-util-character@2.1.0:
- resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
- micromark-util-chunked@2.0.0:
- resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
- micromark-util-classify-character@2.0.0:
- resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
- micromark-util-combine-extensions@2.0.0:
- resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
- micromark-util-decode-numeric-character-reference@2.0.1:
- resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
- micromark-util-decode-string@2.0.0:
- resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
- micromark-util-encode@2.0.0:
- resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
- micromark-util-html-tag-name@2.0.0:
- resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
- micromark-util-normalize-identifier@2.0.0:
- resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
- micromark-util-resolve-all@2.0.0:
- resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
- micromark-util-sanitize-uri@2.0.0:
- resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
- micromark-util-subtokenize@2.0.0:
- resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
- micromark-util-symbol@2.0.0:
- resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
- micromark-util-types@2.0.0:
- resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
- micromark@4.0.0:
- resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
@@ -7731,10 +7930,18 @@ packages:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
+
mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
@@ -7777,6 +7984,10 @@ packages:
resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
engines: {node: 20 || >=22}
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ engines: {node: 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -7839,9 +8050,6 @@ packages:
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
engines: {node: '>= 18'}
- mkdirp-classic@0.5.3:
- resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-
mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
@@ -7851,9 +8059,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
- mnemonist@0.40.0:
- resolution: {integrity: sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg==}
-
mock-socket@9.3.1:
resolution: {integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==}
engines: {node: '>= 8'}
@@ -7871,20 +8076,20 @@ packages:
resolution: {integrity: sha512-NotsCoUCIUkojWCzQff4ttdCfIPoA1UGZsyQbi7KmqkNRfKCrvga8JJi2PknHymHOuor0cJSn/ylj52Cbt2IrQ==}
engines: {node: '>=18'}
- msgpackr-extract@3.0.2:
- resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==}
+ msgpackr-extract@3.0.3:
+ resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
hasBin: true
- msgpackr@1.11.2:
- resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==}
+ msgpackr@1.11.5:
+ resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==}
msw-storybook-addon@2.0.6:
resolution: {integrity: sha512-ExCwDbcJoM2V3iQU+fZNp+axVfNc7DWMRh4lyTXebDO8IbpUNYKGFUrA8UqaeWiRGKVuS7+fU+KXEa9b0OP6uA==}
peerDependencies:
msw: ^2.0.0
- msw@2.11.5:
- resolution: {integrity: sha512-atFI4GjKSJComxcigz273honh8h4j5zzpk5kwG4tGm0TPcYne6bqmVrufeRll6auBeouIkXqZYXxVbWSWxM3RA==}
+ msw@2.12.2:
+ resolution: {integrity: sha512-Fsr8AR5Yu6C0thoWa1Z8qGBFQLDvLsWlAn/v3CNLiUizoRqBYArK3Ex3thXpMWRr1Li5/MKLOEZ5mLygUmWi1A==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
@@ -7904,15 +8109,12 @@ packages:
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
engines: {node: ^18.17.0 || >=20.5.0}
- mylas@2.1.13:
- resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==}
- engines: {node: '>=12.0.0'}
+ mylas@2.1.14:
+ resolution: {integrity: sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==}
+ engines: {node: '>=16.0.0'}
- mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
- nan@2.22.2:
- resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==}
+ nan@2.23.1:
+ resolution: {integrity: sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
@@ -7924,9 +8126,6 @@ packages:
engines: {node: ^18 || >=20}
hasBin: true
- napi-build-utils@2.0.0:
- resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
-
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -7954,23 +8153,16 @@ packages:
resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
engines: {node: '>= 0.4.0'}
- nice-napi@1.0.2:
- resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==}
- os: ['!win32']
-
nise@6.1.1:
resolution: {integrity: sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==}
- node-abi@3.77.0:
- resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==}
+ node-abi@3.85.0:
+ resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==}
engines: {node: '>=10'}
node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
- node-addon-api@3.2.1:
- resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==}
-
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
@@ -8001,28 +8193,31 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-gyp-build-optional-packages@5.0.7:
- resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==}
+ node-gyp-build-optional-packages@5.2.2:
+ resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
hasBin: true
- node-gyp-build@4.6.0:
- resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==}
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
- node-gyp@11.2.0:
- resolution: {integrity: sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==}
+ node-gyp@11.5.0:
+ resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==}
engines: {node: ^18.17.0 || >=20.5.0}
hasBin: true
- node-releases@2.0.21:
- resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
+ node-html-parser@7.0.1:
+ resolution: {integrity: sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==}
- nodemailer@7.0.9:
- resolution: {integrity: sha512-9/Qm0qXIByEP8lEV2qOqcAW7bRpL8CR9jcTwk3NBnHJNmP9fIJ86g2fgmIXqHY+nj55ZEMwWqYAT2QTDpRUYiQ==}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ nodemailer@7.0.10:
+ resolution: {integrity: sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==}
engines: {node: '>=6.0.0'}
- nodemon@3.1.10:
- resolution: {integrity: sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==}
+ nodemon@3.1.11:
+ resolution: {integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==}
engines: {node: '>=10'}
hasBin: true
@@ -8030,18 +8225,14 @@ packages:
resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
engines: {node: '>=12.19'}
- nopt@1.0.10:
- resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==}
- hasBin: true
-
nopt@5.0.0:
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
engines: {node: '>=6'}
hasBin: true
- nopt@6.0.0:
- resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
- engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ nopt@7.2.1:
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
nopt@8.1.0:
@@ -8089,9 +8280,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nwsapi@2.2.16:
- resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
-
oauth2orize-pkce@0.1.2:
resolution: {integrity: sha512-grto2UYhXHi9GLE3IBgBBbV87xci55+bCyjpVuxKyzol6I5Rg0K1MiTuXE+JZk54R86SG2wqXODMiZYHraPpxw==}
@@ -8110,8 +8298,8 @@ packages:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
- object-is@1.1.5:
- resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
engines: {node: '>= 0.4'}
object-keys@1.1.1:
@@ -8134,15 +8322,13 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
- obliterator@2.0.4:
- resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==}
-
- oblivious-set@1.4.0:
- resolution: {integrity: sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==}
+ oblivious-set@2.0.0:
+ resolution: {integrity: sha512-QOUH5Xrsced9fKXaQTjWoDGKeS/Or7E2jB0FN63N4mkAO4qJdB7WR7e6qWAOHM5nk25FJ8TGjhP7DH4l6vFVLg==}
engines: {node: '>=16'}
- on-exit-leak-free@2.1.0:
- resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
+ on-exit-leak-free@2.1.2:
+ resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+ engines: {node: '>=14.0.0'}
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
@@ -8165,15 +8351,11 @@ packages:
oniguruma-to-es@4.3.3:
resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
- open@8.4.2:
- resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
- engines: {node: '>=12'}
-
openapi-types@12.1.3:
resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
- openapi-typescript@7.9.1:
- resolution: {integrity: sha512-9gJtoY04mk6iPMbToPjPxEAtfXZ0dTsMZtsgUI8YZta0btPPig9DJFP4jlerQD/7QOwYgb0tl+zLUpDf7vb7VA==}
+ openapi-typescript@7.10.1:
+ resolution: {integrity: sha512-rBcU8bjKGGZQT4K2ekSTY2Q5veOQbVG/lTKZ49DeCyT9z62hM2Vj/LLHjDHC9W7LJG8YMHcdXpRZDqC1ojB/lw==}
hasBin: true
peerDependencies:
typescript: ^5.x
@@ -8218,10 +8400,6 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -8230,10 +8408,6 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-map@4.0.0:
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
engines: {node: '>=10'}
@@ -8254,8 +8428,8 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
- package-json-from-dist@1.0.0:
- resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
@@ -8276,24 +8450,18 @@ packages:
parse-srcset@1.0.2:
resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==}
- parse5-htmlparser2-tree-adapter@6.0.1:
- resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
-
parse5-htmlparser2-tree-adapter@7.1.0:
resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
parse5-parser-stream@7.1.2:
resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
- parse5@5.1.1:
- resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==}
-
- parse5@6.0.1:
- resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
-
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ parse5@8.0.0:
+ resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
+
parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
@@ -8305,10 +8473,6 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
@@ -8328,8 +8492,8 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-scurry@2.0.0:
- resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
+ path-scurry@2.0.1:
+ resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
engines: {node: 20 || >=22}
path-to-regexp@0.1.12:
@@ -8338,9 +8502,8 @@ packages:
path-to-regexp@6.3.0:
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
- path-to-regexp@8.2.0:
- resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
- engines: {node: '>=16'}
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
@@ -8356,14 +8519,6 @@ packages:
pause-stream@0.0.11:
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
- peek-readable@5.3.1:
- resolution: {integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==}
- engines: {node: '>=14.16'}
-
- peek-readable@7.0.0:
- resolution: {integrity: sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==}
- engines: {node: '>=18'}
-
pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
@@ -8419,33 +8574,34 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
- pid-port@1.0.2:
- resolution: {integrity: sha512-Khqp07zX8IJpmIg56bHrLxS3M0iSL4cq6wnMq8YE7r/hSw3Kn4QxYS6QJg8Bs22Z7CSVj7eSsxFuigYVIFWmjg==}
- engines: {node: '>=18'}
+ pid-port@2.0.0:
+ resolution: {integrity: sha512-EDmfRxLl6lkhPjDI+19l5pkII89xVsiCP3aGjS808f7M16DyCKSXEWthD/hjyDLn5I4gKqTVw7hSgdvdXRJDTw==}
+ engines: {node: '>=20'}
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
- pino-abstract-transport@1.2.0:
- resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==}
+ pino-abstract-transport@2.0.0:
+ resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
pino-std-serializers@7.0.0:
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
- pino@9.2.0:
- resolution: {integrity: sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==}
+ pino@10.1.0:
+ resolution: {integrity: sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==}
hasBin: true
- piscina@4.4.0:
- resolution: {integrity: sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==}
+ piscina@4.9.2:
+ resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==}
- pkce-challenge@4.1.0:
- resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==}
+ pkce-challenge@5.0.0:
+ resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
engines: {node: '>=16.20.0'}
- plimit-lit@1.5.0:
- resolution: {integrity: sha512-Eb/MqCb1Iv/ok4m1FqIXqvUKPISufcjZ605hl3KM/n8GaX8zfhtgdLwZU3vKjuHGh2O9Rjog/bHTq8ofIShdng==}
+ plimit-lit@1.6.1:
+ resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==}
+ engines: {node: '>=12'}
plur@4.0.0:
resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==}
@@ -8459,17 +8615,17 @@ packages:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
- pnpm@10.18.2:
- resolution: {integrity: sha512-n7lp+nSbOt5gNeDxCfC4pgtdCKGof99y4zfakNzJMzbiKAyk5E8jWKZJuDwXlZ6Zk+d3wggIefOAHm8NmZrT3Q==}
+ pnpm@10.23.0:
+ resolution: {integrity: sha512-IcTlaYACrel+Tv6Li0qJqN48haN5GflX56DzDzj7xbvdBZgP/ikXmy+25uaRJC4JjZRdFgF3LK0P71+2QR4qSw==}
engines: {node: '>=18.12'}
hasBin: true
- polished@4.2.2:
- resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==}
+ polished@4.3.1:
+ resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==}
engines: {node: '>=10'}
- possible-typed-array-names@1.0.0:
- resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
postcss-calc@10.1.1:
@@ -8478,20 +8634,20 @@ packages:
peerDependencies:
postcss: ^8.4.38
- postcss-colormin@7.0.4:
- resolution: {integrity: sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw==}
+ postcss-colormin@7.0.5:
+ resolution: {integrity: sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
- postcss-convert-values@7.0.7:
- resolution: {integrity: sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==}
+ postcss-convert-values@7.0.8:
+ resolution: {integrity: sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
- postcss-discard-comments@7.0.4:
- resolution: {integrity: sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==}
+ postcss-discard-comments@7.0.5:
+ resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -8520,8 +8676,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-merge-rules@7.0.6:
- resolution: {integrity: sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==}
+ postcss-merge-rules@7.0.7:
+ resolution: {integrity: sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -8538,8 +8694,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-minify-params@7.0.4:
- resolution: {integrity: sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw==}
+ postcss-minify-params@7.0.5:
+ resolution: {integrity: sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -8586,8 +8742,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-normalize-unicode@7.0.4:
- resolution: {integrity: sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g==}
+ postcss-normalize-unicode@7.0.5:
+ resolution: {integrity: sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -8610,8 +8766,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-reduce-initial@7.0.4:
- resolution: {integrity: sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q==}
+ postcss-reduce-initial@7.0.5:
+ resolution: {integrity: sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -8622,10 +8778,6 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-selector-parser@6.1.2:
- resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
- engines: {node: '>=4'}
-
postcss-selector-parser@7.1.0:
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
engines: {node: '>=4'}
@@ -8665,11 +8817,6 @@ packages:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'}
- prebuild-install@7.1.3:
- resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
- engines: {node: '>=10'}
- hasBin: true
-
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -8691,8 +8838,8 @@ packages:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- pretty-ms@9.2.0:
- resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==}
+ pretty-ms@9.3.0:
+ resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==}
engines: {node: '>=18'}
private-ip@3.0.2:
@@ -8713,11 +8860,8 @@ packages:
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
- process-warning@3.0.0:
- resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
-
- process-warning@4.0.0:
- resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==}
+ process-warning@4.0.1:
+ resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
process-warning@5.0.0:
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
@@ -8740,8 +8884,8 @@ packages:
promise@7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
- property-information@7.0.0:
- resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
@@ -8760,6 +8904,10 @@ packages:
resolution: {integrity: sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ ps-list@9.0.0:
+ resolution: {integrity: sha512-lxMEoIL/BQlk2KunFzxwUPwMvjFH7x7cmvzSLsSHpyMXl9FFfLUlfKrYwFc4wx/ZaIxxuXC4n8rjQ1CX/tkXVQ==}
+ engines: {node: '>=20'}
+
ps-tree@1.2.0:
resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==}
engines: {node: '>= 0.10'}
@@ -8815,12 +8963,12 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- pvtsutils@1.3.5:
- resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==}
+ pvtsutils@1.3.6:
+ resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
- pvutils@1.1.3:
- resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==}
- engines: {node: '>=6.0.0'}
+ pvutils@1.1.5:
+ resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==}
+ engines: {node: '>=16.0.0'}
qr-code-styling@1.9.2:
resolution: {integrity: sha512-RgJaZJ1/RrXJ6N0j7a+pdw3zMBmzZU4VN2dtAZf8ZggCfRB5stEQ3IoDNGaNhYY3nnZKYlYSLl5YkfWN5dPutg==}
@@ -8845,15 +8993,13 @@ packages:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
- queue-lit@1.5.0:
- resolution: {integrity: sha512-IslToJ4eiCEE9xwMzq3viOO5nH8sUWUCwoElrhNMozzr9IIt2qqvB4I+uHu/zJTQVqc9R5DFwok4ijNK1pU3fA==}
+ queue-lit@1.5.2:
+ resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==}
+ engines: {node: '>=12'}
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- queue-tick@1.0.1:
- resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
-
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
@@ -8880,28 +9026,24 @@ packages:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
- raw-body@3.0.0:
- resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
- engines: {node: '>= 0.8'}
+ raw-body@3.0.1:
+ resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==}
+ engines: {node: '>= 0.10'}
- rc@1.2.8:
- resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
- hasBin: true
+ rdf-canonize@5.0.0:
+ resolution: {integrity: sha512-g8OUrgMXAR9ys/ZuJVfBr05sPPoMA7nHIVs8VEvg9QwM5W4GR2qSFEEHjsyHF1eWlBaf8Ev40WNjQFQ+nJTO3w==}
+ engines: {node: '>=18'}
- rdf-canonize@3.4.0:
- resolution: {integrity: sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==}
- engines: {node: '>=12'}
-
- re2@1.22.1:
- resolution: {integrity: sha512-E4J0EtgyNLdIr0wTg0dQPefuiqNY29KaLacytiUAYYRzxCG+zOkWoUygt1rI+TA1LrhN49/njrfSO1DHtVC5Vw==}
+ re2@1.22.3:
+ resolution: {integrity: sha512-002aE82U91DiaUA16U6vbiJusvPXn1OWiQukOxJkVUTXbzrSuQbFNHYKcGw8QK/uifRCfjl2Hd/vXYDanKkmaQ==}
react-docgen-typescript@2.4.0:
resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==}
peerDependencies:
typescript: '>= 4.3.x'
- react-docgen@8.0.1:
- resolution: {integrity: sha512-kQKsqPLplY3Hx4jGnM3jpQcG3FQDt7ySz32uTHt3C9HAe45kNXG+3o16Eqn3Fw1GtMfHoN3b4J/z2e6cZJCmqQ==}
+ react-docgen@8.0.2:
+ resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==}
engines: {node: ^20.9.0 || >=22}
react-dom@19.2.0:
@@ -8912,8 +9054,8 @@ packages:
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
- react-is@18.2.0:
- resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
react@19.2.0:
resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
@@ -8927,19 +9069,19 @@ packages:
resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
engines: {node: '>=8'}
- readable-stream@2.3.7:
- resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
- readable-stream@4.3.0:
- resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==}
+ readable-stream@4.7.0:
+ resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- readdir-glob@1.1.2:
- resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==}
+ readdir-glob@1.1.3:
+ resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
@@ -8967,10 +9109,6 @@ packages:
redis-info@3.1.0:
resolution: {integrity: sha512-ER4L9Sh/vm63DkIE0bkSjxluQlioBiBgf5w1UuldaW/3vPcecdljVDisZhmnCMvsxHNiARTTDDHGg9cGwTfrKg==}
- redis-lock@0.1.4:
- resolution: {integrity: sha512-7/+zu86XVQfJVx1nHTzux5reglDiyUCDwmW7TSlvVezfhH2YLc/Rc8NE0ejQG+8/0lwKzm29/u/4+ogKeLosiA==}
- engines: {node: '>=0.6'}
-
redis-parser@3.0.0:
resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
engines: {node: '>=4'}
@@ -8985,9 +9123,6 @@ packages:
regenerator-runtime@0.13.11:
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
- regenerator-runtime@0.14.0:
- resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
-
regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
@@ -9001,8 +9136,8 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
- remark-gfm@4.0.0:
- resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+ remark-gfm@4.0.1:
+ resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
@@ -9024,8 +9159,8 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- require-in-the-middle@7.3.0:
- resolution: {integrity: sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==}
+ require-in-the-middle@7.5.2:
+ resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==}
engines: {node: '>=8.6.0'}
require-main-filename@2.0.0:
@@ -9041,8 +9176,8 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines: {node: '>= 0.4'}
hasBin: true
@@ -9069,8 +9204,8 @@ packages:
rettime@0.7.0:
resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==}
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rfdc@1.4.1:
@@ -9086,13 +9221,14 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rollup@4.52.4:
- resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==}
+ rollup@4.53.3:
+ resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rrweb-cssom@0.8.0:
- resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
+ router@2.2.0:
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
rss-parser@3.13.0:
resolution: {integrity: sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==}
@@ -9121,11 +9257,11 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
- safe-regex2@4.0.0:
- resolution: {integrity: sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==}
+ safe-regex2@5.0.0:
+ resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}
- safe-stable-stringify@2.4.2:
- resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==}
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
safer-buffer@2.1.2:
@@ -9134,13 +9270,13 @@ packages:
sanitize-html@2.17.0:
resolution: {integrity: sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==}
- sass@1.93.2:
- resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==}
+ sass@1.94.2:
+ resolution: {integrity: sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==}
engines: {node: '>=14.0.0'}
hasBin: true
- sax@1.4.1:
- resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+ sax@1.4.3:
+ resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
saxes@6.0.0:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
@@ -9152,11 +9288,8 @@ packages:
secure-json-parse@2.7.0:
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
- secure-json-parse@3.0.2:
- resolution: {integrity: sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==}
-
- secure-json-parse@4.0.0:
- resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==}
+ secure-json-parse@4.1.0:
+ resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
seedrandom@3.0.5:
resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==}
@@ -9195,15 +9328,23 @@ packages:
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
engines: {node: '>= 0.8.0'}
+ send@1.2.0:
+ resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+ engines: {node: '>= 18'}
+
serve-static@1.16.2:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
+ serve-static@2.2.0:
+ resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
+ engines: {node: '>= 18'}
+
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
- set-cookie-parser@2.6.0:
- resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
+ set-cookie-parser@2.7.1:
+ resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
@@ -9240,8 +9381,8 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shiki@3.13.0:
- resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==}
+ shiki@3.15.0:
+ resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==}
shimmer@1.2.1:
resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==}
@@ -9272,17 +9413,11 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- simple-concat@1.0.1:
- resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-
- simple-get@4.0.1:
- resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
-
simple-oauth2@5.1.0:
resolution: {integrity: sha512-gWDa38Ccm4MwlG5U7AlcJxPv3lvr80dU7ARJWrGdgvOKyzSj1gr3GBPN1rABTedAYvC/LsGYoFuFxwDBPtGEbw==}
- simple-swizzle@0.2.2:
- resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
simple-update-notifier@2.0.0:
resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
@@ -9399,12 +9534,12 @@ packages:
resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
engines: {node: '>= 14'}
- socks@2.8.4:
- resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==}
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
- sonic-boom@4.0.1:
- resolution: {integrity: sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==}
+ sonic-boom@4.2.0:
+ resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
sort-keys-length@1.0.1:
resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
@@ -9428,27 +9563,27 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- spdx-correct@3.1.1:
- resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
- spdx-exceptions@2.3.0:
- resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
spdx-expression-parse@3.0.1:
resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
- spdx-license-ids@3.0.12:
- resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
+ spdx-license-ids@3.0.22:
+ resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
- split2@4.1.0:
- resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==}
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
split@0.3.3:
@@ -9460,8 +9595,8 @@ packages:
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
- sql-highlight@6.0.0:
- resolution: {integrity: sha512-+fLpbAbWkQ+d0JEchJT/NrRRXbYRNbG15gFpANx73EwxQB1PRjj+k/OI0GTU0J63g8ikGkJECQp9z8XEJZvPRw==}
+ sql-highlight@6.1.0:
+ resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==}
engines: {node: '>=14'}
sshpk@1.18.0:
@@ -9479,8 +9614,8 @@ packages:
standard-as-callback@2.1.0:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
- start-server-and-test@2.1.2:
- resolution: {integrity: sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==}
+ start-server-and-test@2.1.3:
+ resolution: {integrity: sha512-k4EcbNjeg0odaDkAMlIeDVDByqX9PIgL4tivgP2tES6Zd8o+4pTq/HgbWCyA3VHIoZopB+wGnNPKYGGSByNriQ==}
engines: {node: '>=16'}
hasBin: true
@@ -9492,8 +9627,8 @@ packages:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
- std-env@3.9.0:
- resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
@@ -9518,8 +9653,8 @@ packages:
react-dom:
optional: true
- storybook@9.1.10:
- resolution: {integrity: sha512-4+U7gF9hMpGilQmdVJwQaVZZEkD7XwC4ZDmBa51mobaPYelELEMoMfNM2hLyvB2x12gk1IJui1DnwOE4t+MXhw==}
+ storybook@10.0.8:
+ resolution: {integrity: sha512-vQMufKKA9TxgoEDHJv3esrqUkjszuuRiDkThiHxENFPdQawHhm2Dei+iwNRwH5W671zTDy9iRT9P1KDjcU5Iyw==}
hasBin: true
peerDependencies:
prettier: ^2 || ^3
@@ -9540,8 +9675,8 @@ packages:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
- streamx@2.15.0:
- resolution: {integrity: sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==}
+ streamx@2.23.0:
+ resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
strict-event-emitter-types@2.0.0:
resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==}
@@ -9561,6 +9696,10 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines: {node: '>= 0.4'}
@@ -9616,37 +9755,23 @@ packages:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
- strip-indent@4.1.0:
- resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==}
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
engines: {node: '>=12'}
- strip-json-comments@2.0.1:
- resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
- engines: {node: '>=0.10.0'}
-
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- strip-literal@3.0.0:
- resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
-
- strnum@1.0.5:
- resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
-
strnum@2.1.1:
resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
- strtok3@10.2.2:
- resolution: {integrity: sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==}
+ strtok3@10.3.4:
+ resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==}
engines: {node: '>=18'}
- strtok3@9.0.1:
- resolution: {integrity: sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw==}
- engines: {node: '>=16'}
-
- stylehacks@7.0.5:
- resolution: {integrity: sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA==}
+ stylehacks@7.0.6:
+ resolution: {integrity: sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -9659,8 +9784,8 @@ packages:
resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==}
engines: {node: '>=14.18.0'}
- supports-color@10.2.0:
- resolution: {integrity: sha512-5eG9FQjEjDbAlI5+kdpdyPIBMRH4GfTVDGREVupaZHmVoppknhM29b/S9BkQz7cathp85BVgRi/As3Siln7e0Q==}
+ supports-color@10.2.2:
+ resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
engines: {node: '>=18'}
supports-color@5.5.0:
@@ -9703,13 +9828,6 @@ packages:
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true
- tar-fs@2.1.4:
- resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==}
-
- tar-stream@2.2.0:
- resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
- engines: {node: '>=6'}
-
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
@@ -9717,38 +9835,30 @@ packages:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
- tar@7.5.1:
- resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
+ tar@7.5.2:
+ resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==}
engines: {node: '>=18'}
taskkill@5.0.0:
resolution: {integrity: sha512-+HRtZ40Vc+6YfCDWCeAsixwxJgMbPY4HHuTgzPYH3JXvqHWUlsCfy+ylXlAKhFNcuLp4xVeWeFBUhDk+7KYUvQ==}
engines: {node: '>=14.16'}
- terser@5.44.0:
- resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
+ terser@5.44.1:
+ resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==}
engines: {node: '>=10'}
hasBin: true
- test-exclude@7.0.1:
- resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
- engines: {node: '>=18'}
+ text-decoder@1.2.3:
+ resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
textarea-caret@3.1.0:
resolution: {integrity: sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q==}
- thenify-all@1.6.0:
- resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
- engines: {node: '>=0.8'}
-
- thenify@3.3.1:
- resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
thread-stream@3.1.0:
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
- three@0.180.0:
- resolution: {integrity: sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==}
+ three@0.181.2:
+ resolution: {integrity: sha512-k/CjiZ80bYss6Qs7/ex1TBlPD11whT9oKfT8oTGiHa34W4JRd1NiH/Tr1DbHWQ2/vMUypxksLnF2CfmlmM5XFQ==}
throttle-debounce@5.0.2:
resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
@@ -9779,10 +9889,6 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
- tinypool@1.1.1:
- resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
- engines: {node: ^18.0.0 || >=20.0.0}
-
tinyrainbow@1.2.0:
resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
engines: {node: '>=14.0.0'}
@@ -9791,6 +9897,10 @@ packages:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
+ tinyrainbow@3.0.3:
+ resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ engines: {node: '>=14.0.0'}
+
tinyspy@3.0.2:
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
@@ -9799,18 +9909,18 @@ packages:
resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
engines: {node: '>=14.0.0'}
- tldts-core@6.1.61:
- resolution: {integrity: sha512-In7VffkDWUPgwa+c9picLUxvb0RltVwTkSgMNFgvlGSWveCzGBemBqTsgJCL4EDFWZ6WH0fKTsot6yNhzy3ZzQ==}
+ tldts-core@6.1.86:
+ resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
- tldts-core@7.0.16:
- resolution: {integrity: sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==}
+ tldts-core@7.0.18:
+ resolution: {integrity: sha512-jqJC13oP4FFAahv4JT/0WTDrCF9Okv7lpKtOZUGPLiAnNbACcSg8Y8T+Z9xthOmRBqi/Sob4yi0TE0miRCvF7Q==}
- tldts@6.1.61:
- resolution: {integrity: sha512-rv8LUyez4Ygkopqn+M6OLItAOT9FF3REpPQDkdMx5ix8w4qkuE7Vo2o/vw1nxKQYmJDV8JpAMJQr1b+lTKf0FA==}
+ tldts@6.1.86:
+ resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
hasBin: true
- tldts@7.0.16:
- resolution: {integrity: sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw==}
+ tldts@7.0.18:
+ resolution: {integrity: sha512-lCcgTAgMxQ1JKOWrVGo6E69Ukbnx4Gc1wiYLRf6J5NN4HRYJtCby1rPF8rkQ4a6qqoFBK5dvjJ1zJ0F7VfDSvw==}
hasBin: true
tmp@0.2.5:
@@ -9839,12 +9949,12 @@ packages:
token-stream@1.0.0:
resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
- token-types@6.0.0:
- resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==}
+ token-types@6.1.1:
+ resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==}
engines: {node: '>=14.16'}
- touch@3.1.0:
- resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==}
+ touch@3.1.1:
+ resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==}
hasBin: true
tough-cookie@5.1.2:
@@ -9858,9 +9968,9 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- tr46@5.1.1:
- resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
- engines: {node: '>=18'}
+ tr46@6.0.0:
+ resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
+ engines: {node: '>=20'}
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
@@ -9909,6 +10019,9 @@ packages:
engines: {node: '>=14.16'}
hasBin: true
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -9917,6 +10030,10 @@ packages:
engines: {node: '>=18.0.0'}
hasBin: true
+ tsyringe@4.10.0:
+ resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==}
+ engines: {node: '>= 6.0.0'}
+
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
@@ -9931,6 +10048,10 @@ packages:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
type-fest@0.18.1:
resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
engines: {node: '>=10'}
@@ -9959,6 +10080,10 @@ packages:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -10051,12 +10176,12 @@ packages:
resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
engines: {node: '>=8'}
- uint8array-extras@1.4.0:
- resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==}
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
engines: {node: '>=18'}
- ulid@2.4.0:
- resolution: {integrity: sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg==}
+ ulid@3.0.1:
+ resolution: {integrity: sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==}
hasBin: true
unbox-primitive@1.1.0:
@@ -10072,28 +10197,23 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
- undici@5.28.5:
- resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==}
- engines: {node: '>=14.0'}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
- undici@6.19.8:
- resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==}
+ undici@6.22.0:
+ resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==}
engines: {node: '>=18.17'}
undici@7.16.0:
resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==}
engines: {node: '>=20.18.1'}
- unicorn-magic@0.1.0:
- resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
- engines: {node: '>=18'}
-
unicorn-magic@0.3.0:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
- unified@11.0.4:
- resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
unique-filename@4.0.0:
resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==}
@@ -10103,8 +10223,8 @@ packages:
resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==}
engines: {node: ^18.17.0 || >=20.5.0}
- unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
@@ -10112,8 +10232,8 @@ packages:
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
- unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
@@ -10153,15 +10273,12 @@ packages:
resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
engines: {node: '>=8'}
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ update-browserslist-db@1.1.4:
+ resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
- uri-js-replace@1.0.1:
- resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==}
-
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -10216,16 +10333,11 @@ packages:
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
engines: {'0': node >=0.6.0}
- vfile-message@4.0.2:
- resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
- vfile@6.0.1:
- resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
-
- vite-node@3.2.4:
- resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
- hasBin: true
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
vite-plugin-glsl@1.5.4:
resolution: {integrity: sha512-EUmwL+IDK+dGDAlaKm89++k8aJ4qmHjLQxrngww3GLOOAQ4aZ48o9YR1ie7XPe08iDWlG+9Uh5V7oiZcXTUbyA==}
@@ -10243,8 +10355,8 @@ packages:
vite-plugin-turbosnap@1.0.3:
resolution: {integrity: sha512-p4D8CFVhZS412SyQX125qxyzOgIFouwOcvjZWk6bQbNPR1wtaEzFT6jZxAjf1dejlGqa6fqHcuCvQea6EWUkUA==}
- vite@7.1.9:
- resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==}
+ vite@7.2.4:
+ resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -10294,26 +10406,35 @@ packages:
peerDependencies:
vitest: '>=3'
- vitest@3.2.4:
- resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ vitest@4.0.13:
+ resolution: {integrity: sha512-QSD4I0fN6uZQfftryIXuqvqgBxTvJ3ZNkF6RWECd82YGAYAfhcppBLFXzXJHQAAhVFyYEuFTrq6h0hQqjB7jIQ==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
'@types/debug': ^4.1.12
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- '@vitest/browser': 3.2.4
- '@vitest/ui': 3.2.4
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.0.13
+ '@vitest/browser-preview': 4.0.13
+ '@vitest/browser-webdriverio': 4.0.13
+ '@vitest/ui': 4.0.13
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
+ '@opentelemetry/api':
+ optional: true
'@types/debug':
optional: true
'@types/node':
optional: true
- '@vitest/browser':
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
optional: true
'@vitest/ui':
optional: true
@@ -10351,17 +10472,14 @@ packages:
typescript:
optional: true
- vue-component-type-helpers@1.8.4:
- resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==}
-
vue-component-type-helpers@2.2.12:
resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==}
- vue-component-type-helpers@3.1.1:
- resolution: {integrity: sha512-B0kHv7qX6E7+kdc5nsaqjdGZ1KwNKSUQDWGy7XkTYT7wFsOpkEyaJ1Vq79TjwrrtuLRgizrTV7PPuC4rRQo+vw==}
+ vue-component-type-helpers@3.1.5:
+ resolution: {integrity: sha512-7V3yJuNWW7/1jxCcI1CswnpDsvs02Qcx/N43LkV+ZqhLj2PKj50slUflHAroNkN4UWiYfzMUUUXiNuv9khmSpQ==}
- vue-demi@0.14.7:
- resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
hasBin: true
peerDependencies:
@@ -10387,14 +10505,14 @@ packages:
peerDependencies:
vue: '>=2'
- vue-tsc@3.1.1:
- resolution: {integrity: sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A==}
+ vue-tsc@3.1.5:
+ resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
- vue@3.5.22:
- resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==}
+ vue@3.5.24:
+ resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -10410,9 +10528,9 @@ packages:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
- wait-on@8.0.5:
- resolution: {integrity: sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==}
- engines: {node: '>=12.0.0'}
+ wait-on@9.0.3:
+ resolution: {integrity: sha512-13zBnyYvFDW1rBvWiJ6Av3ymAaq8EDQuvxZnPIw3g04UqGi4TyoIJABmfJ6zrvKo9yeFQExNkOk7idQbDJcuKA==}
+ engines: {node: '>=20.0.0'}
hasBin: true
wanakana@5.3.1:
@@ -10432,20 +10550,16 @@ packages:
resolution: {integrity: sha512-NlfnGF8MY9ZUwFjyq3vOUBx7KwF8bmE+ywR781SB0nWB6MoMxN4BA8gtgP1KGTZo/O/AyWJz7HZpR704eaj4mg==}
engines: {node: '>=10.0.0'}
- web-streams-polyfill@3.2.1:
- resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
- engines: {node: '>= 8'}
-
- web-streams-polyfill@4.0.0:
- resolution: {integrity: sha512-0zJXHRAYEjM2tUfZ2DiSOHAa2aw1tisnnhU3ufD57R8iefL+DcdJyRBRyJpG+NUimDgbTI/lH+gAE1PAvV3Cgw==}
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
- webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
- engines: {node: '>=12'}
+ webidl-conversions@8.0.0:
+ resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==}
+ engines: {node: '>=20'}
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
@@ -10462,9 +10576,9 @@ packages:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
- whatwg-url@14.2.0:
- resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
- engines: {node: '>=18'}
+ whatwg-url@15.1.0:
+ resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==}
+ engines: {node: '>=20'}
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@@ -10481,8 +10595,8 @@ packages:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
- which-module@2.0.0:
- resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
+ which-module@2.0.1:
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
which-typed-array@1.1.19:
resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
@@ -10530,6 +10644,10 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -10607,6 +10725,10 @@ packages:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
@@ -10619,6 +10741,10 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yargs@18.0.0:
+ resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
yauzl@2.10.0:
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
@@ -10630,16 +10756,12 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-queue@1.2.1:
- resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
- engines: {node: '>=12.20'}
-
yoctocolors-cjs@2.1.3:
resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
engines: {node: '>=18'}
- yoctocolors@2.1.1:
- resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==}
+ yoctocolors@2.1.2:
+ resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
engines: {node: '>=18'}
zip-stream@6.0.1:
@@ -10651,12 +10773,10 @@ packages:
snapshots:
- '@adobe/css-tools@4.4.4': {}
+ '@acemir/cssom@0.9.23':
+ optional: true
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
+ '@adobe/css-tools@4.4.4': {}
'@analytics/cookie-utils@0.2.14':
dependencies:
@@ -10697,45 +10817,58 @@ snapshots:
'@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)':
dependencies:
'@types/json-schema': 7.0.15
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
'@apm-js-collab/code-transformer@0.8.2': {}
'@apm-js-collab/tracing-hooks@0.3.1':
dependencies:
'@apm-js-collab/code-transformer': 0.8.2
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
module-details-from-path: 1.0.4
transitivePeerDependencies:
- supports-color
- '@asamuzakjp/css-color@2.8.3':
+ '@asamuzakjp/css-color@4.0.5':
dependencies:
- '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
- lru-cache: 10.4.3
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ lru-cache: 11.2.2
+ optional: true
+
+ '@asamuzakjp/dom-selector@6.7.4':
+ dependencies:
+ '@asamuzakjp/nwsapi': 2.3.9
+ bidi-js: 1.0.3
+ css-tree: 3.1.0
+ is-potential-custom-element-name: 1.0.1
+ lru-cache: 11.2.2
+ optional: true
+
+ '@asamuzakjp/nwsapi@2.3.9':
+ optional: true
'@aws-crypto/crc32@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.901.0
+ '@aws-sdk/types': 3.936.0
tslib: 2.8.1
'@aws-crypto/crc32c@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.901.0
+ '@aws-sdk/types': 3.936.0
tslib: 2.8.1
'@aws-crypto/sha1-browser@5.2.0':
dependencies:
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/util-locate-window': 3.208.0
- '@smithy/util-utf8': 2.0.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-locate-window': 3.893.0
+ '@smithy/util-utf8': 2.3.0
tslib: 2.8.1
'@aws-crypto/sha256-browser@5.2.0':
@@ -10743,15 +10876,15 @@ snapshots:
'@aws-crypto/sha256-js': 5.2.0
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/util-locate-window': 3.208.0
- '@smithy/util-utf8': 2.0.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-locate-window': 3.893.0
+ '@smithy/util-utf8': 2.3.0
tslib: 2.8.1
'@aws-crypto/sha256-js@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.901.0
+ '@aws-sdk/types': 3.936.0
tslib: 2.8.1
'@aws-crypto/supports-web-crypto@5.2.0':
@@ -10760,805 +10893,539 @@ snapshots:
'@aws-crypto/util@5.2.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/util-utf8': 2.0.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/util-utf8': 2.3.0
tslib: 2.8.1
- '@aws-sdk/client-s3@3.908.0':
+ '@aws-sdk/client-s3@3.937.0':
dependencies:
'@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/credential-provider-node': 3.908.0
- '@aws-sdk/middleware-bucket-endpoint': 3.901.0
- '@aws-sdk/middleware-expect-continue': 3.901.0
- '@aws-sdk/middleware-flexible-checksums': 3.908.0
- '@aws-sdk/middleware-host-header': 3.901.0
- '@aws-sdk/middleware-location-constraint': 3.901.0
- '@aws-sdk/middleware-logger': 3.901.0
- '@aws-sdk/middleware-recursion-detection': 3.901.0
- '@aws-sdk/middleware-sdk-s3': 3.908.0
- '@aws-sdk/middleware-ssec': 3.901.0
- '@aws-sdk/middleware-user-agent': 3.908.0
- '@aws-sdk/region-config-resolver': 3.901.0
- '@aws-sdk/signature-v4-multi-region': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/util-endpoints': 3.901.0
- '@aws-sdk/util-user-agent-browser': 3.907.0
- '@aws-sdk/util-user-agent-node': 3.908.0
- '@aws-sdk/xml-builder': 3.901.0
- '@smithy/config-resolver': 4.3.0
- '@smithy/core': 3.15.0
- '@smithy/eventstream-serde-browser': 4.2.0
- '@smithy/eventstream-serde-config-resolver': 4.3.0
- '@smithy/eventstream-serde-node': 4.2.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/hash-blob-browser': 4.2.1
- '@smithy/hash-node': 4.2.0
- '@smithy/hash-stream-node': 4.2.0
- '@smithy/invalid-dependency': 4.2.0
- '@smithy/md5-js': 4.2.0
- '@smithy/middleware-content-length': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-retry': 4.4.1
- '@smithy/middleware-serde': 4.2.0
- '@smithy/middleware-stack': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/node-http-handler': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/credential-provider-node': 3.936.0
+ '@aws-sdk/middleware-bucket-endpoint': 3.936.0
+ '@aws-sdk/middleware-expect-continue': 3.936.0
+ '@aws-sdk/middleware-flexible-checksums': 3.936.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-location-constraint': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-sdk-s3': 3.936.0
+ '@aws-sdk/middleware-ssec': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.936.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/signature-v4-multi-region': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.936.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.5
+ '@smithy/eventstream-serde-browser': 4.2.5
+ '@smithy/eventstream-serde-config-resolver': 4.3.5
+ '@smithy/eventstream-serde-node': 4.2.5
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-blob-browser': 4.2.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/hash-stream-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/md5-js': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.0
- '@smithy/util-defaults-mode-node': 4.2.1
- '@smithy/util-endpoints': 3.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
- '@smithy/util-stream': 4.5.0
+ '@smithy/util-defaults-mode-browser': 4.3.11
+ '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-stream': 4.5.6
'@smithy/util-utf8': 4.2.0
- '@smithy/util-waiter': 4.2.0
- '@smithy/uuid': 1.1.0
+ '@smithy/util-waiter': 4.2.5
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-ses@3.873.0':
+ '@aws-sdk/client-sesv2@3.938.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/credential-provider-node': 3.873.0
- '@aws-sdk/middleware-host-header': 3.873.0
- '@aws-sdk/middleware-logger': 3.873.0
- '@aws-sdk/middleware-recursion-detection': 3.873.0
- '@aws-sdk/middleware-user-agent': 3.873.0
- '@aws-sdk/region-config-resolver': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@aws-sdk/util-endpoints': 3.873.0
- '@aws-sdk/util-user-agent-browser': 3.873.0
- '@aws-sdk/util-user-agent-node': 3.873.0
- '@smithy/config-resolver': 4.3.0
- '@smithy/core': 3.15.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/hash-node': 4.2.0
- '@smithy/invalid-dependency': 4.2.0
- '@smithy/middleware-content-length': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-retry': 4.4.1
- '@smithy/middleware-serde': 4.2.0
- '@smithy/middleware-stack': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/node-http-handler': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/credential-provider-node': 3.936.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.936.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/signature-v4-multi-region': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.936.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.5
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.0
- '@smithy/util-defaults-mode-node': 4.2.1
- '@smithy/util-endpoints': 3.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
+ '@smithy/util-defaults-mode-browser': 4.3.11
+ '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
'@smithy/util-utf8': 4.2.0
- '@smithy/util-waiter': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso@3.873.0':
+ '@aws-sdk/client-sso@3.936.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/middleware-host-header': 3.873.0
- '@aws-sdk/middleware-logger': 3.873.0
- '@aws-sdk/middleware-recursion-detection': 3.873.0
- '@aws-sdk/middleware-user-agent': 3.873.0
- '@aws-sdk/region-config-resolver': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@aws-sdk/util-endpoints': 3.873.0
- '@aws-sdk/util-user-agent-browser': 3.873.0
- '@aws-sdk/util-user-agent-node': 3.873.0
- '@smithy/config-resolver': 4.3.0
- '@smithy/core': 3.15.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/hash-node': 4.2.0
- '@smithy/invalid-dependency': 4.2.0
- '@smithy/middleware-content-length': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-retry': 4.4.1
- '@smithy/middleware-serde': 4.2.0
- '@smithy/middleware-stack': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/node-http-handler': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.936.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.936.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.5
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.0
- '@smithy/util-defaults-mode-node': 4.2.1
- '@smithy/util-endpoints': 3.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
+ '@smithy/util-defaults-mode-browser': 4.3.11
+ '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso@3.908.0':
+ '@aws-sdk/core@3.936.0':
dependencies:
- '@aws-crypto/sha256-browser': 5.2.0
- '@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/middleware-host-header': 3.901.0
- '@aws-sdk/middleware-logger': 3.901.0
- '@aws-sdk/middleware-recursion-detection': 3.901.0
- '@aws-sdk/middleware-user-agent': 3.908.0
- '@aws-sdk/region-config-resolver': 3.901.0
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/util-endpoints': 3.901.0
- '@aws-sdk/util-user-agent-browser': 3.907.0
- '@aws-sdk/util-user-agent-node': 3.908.0
- '@smithy/config-resolver': 4.3.0
- '@smithy/core': 3.15.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/hash-node': 4.2.0
- '@smithy/invalid-dependency': 4.2.0
- '@smithy/middleware-content-length': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-retry': 4.4.1
- '@smithy/middleware-serde': 4.2.0
- '@smithy/middleware-stack': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/node-http-handler': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/xml-builder': 3.930.0
+ '@smithy/core': 3.18.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
'@smithy/util-base64': 4.3.0
- '@smithy/util-body-length-browser': 4.2.0
- '@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.0
- '@smithy/util-defaults-mode-node': 4.2.1
- '@smithy/util-endpoints': 3.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
- '@smithy/util-utf8': 4.2.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - aws-crt
-
- '@aws-sdk/core@3.873.0':
- dependencies:
- '@aws-sdk/types': 3.862.0
- '@aws-sdk/xml-builder': 3.873.0
- '@smithy/core': 3.15.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/property-provider': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/signature-v4': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/util-base64': 4.3.0
- '@smithy/util-body-length-browser': 4.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-utf8': 4.2.0
- fast-xml-parser: 5.2.5
- tslib: 2.8.1
-
- '@aws-sdk/core@3.908.0':
- dependencies:
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/xml-builder': 3.901.0
- '@smithy/core': 3.15.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/property-provider': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/signature-v4': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/util-base64': 4.3.0
- '@smithy/util-middleware': 4.2.0
+ '@smithy/util-middleware': 4.2.5
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-env@3.873.0':
+ '@aws-sdk/credential-provider-env@3.936.0':
dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/property-provider': 4.2.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-env@3.908.0':
+ '@aws-sdk/credential-provider-http@3.936.0':
dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/property-provider': 4.2.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
+ '@smithy/util-stream': 4.5.6
tslib: 2.8.1
- '@aws-sdk/credential-provider-http@3.873.0':
+ '@aws-sdk/credential-provider-ini@3.936.0':
dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/node-http-handler': 4.3.0
- '@smithy/property-provider': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/util-stream': 4.5.0
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-http@3.908.0':
- dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/node-http-handler': 4.3.0
- '@smithy/property-provider': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/util-stream': 4.5.0
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-ini@3.873.0':
- dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/credential-provider-env': 3.873.0
- '@aws-sdk/credential-provider-http': 3.873.0
- '@aws-sdk/credential-provider-process': 3.873.0
- '@aws-sdk/credential-provider-sso': 3.873.0
- '@aws-sdk/credential-provider-web-identity': 3.873.0
- '@aws-sdk/nested-clients': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/credential-provider-imds': 4.2.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/credential-provider-env': 3.936.0
+ '@aws-sdk/credential-provider-http': 3.936.0
+ '@aws-sdk/credential-provider-login': 3.936.0
+ '@aws-sdk/credential-provider-process': 3.936.0
+ '@aws-sdk/credential-provider-sso': 3.936.0
+ '@aws-sdk/credential-provider-web-identity': 3.936.0
+ '@aws-sdk/nested-clients': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-ini@3.908.0':
+ '@aws-sdk/credential-provider-login@3.936.0':
dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/credential-provider-env': 3.908.0
- '@aws-sdk/credential-provider-http': 3.908.0
- '@aws-sdk/credential-provider-process': 3.908.0
- '@aws-sdk/credential-provider-sso': 3.908.0
- '@aws-sdk/credential-provider-web-identity': 3.908.0
- '@aws-sdk/nested-clients': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/credential-provider-imds': 4.2.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/nested-clients': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-node@3.873.0':
+ '@aws-sdk/credential-provider-node@3.936.0':
dependencies:
- '@aws-sdk/credential-provider-env': 3.873.0
- '@aws-sdk/credential-provider-http': 3.873.0
- '@aws-sdk/credential-provider-ini': 3.873.0
- '@aws-sdk/credential-provider-process': 3.873.0
- '@aws-sdk/credential-provider-sso': 3.873.0
- '@aws-sdk/credential-provider-web-identity': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/credential-provider-imds': 4.2.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/credential-provider-env': 3.936.0
+ '@aws-sdk/credential-provider-http': 3.936.0
+ '@aws-sdk/credential-provider-ini': 3.936.0
+ '@aws-sdk/credential-provider-process': 3.936.0
+ '@aws-sdk/credential-provider-sso': 3.936.0
+ '@aws-sdk/credential-provider-web-identity': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-node@3.908.0':
+ '@aws-sdk/credential-provider-process@3.936.0':
dependencies:
- '@aws-sdk/credential-provider-env': 3.908.0
- '@aws-sdk/credential-provider-http': 3.908.0
- '@aws-sdk/credential-provider-ini': 3.908.0
- '@aws-sdk/credential-provider-process': 3.908.0
- '@aws-sdk/credential-provider-sso': 3.908.0
- '@aws-sdk/credential-provider-web-identity': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/credential-provider-imds': 4.2.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-sso@3.936.0':
+ dependencies:
+ '@aws-sdk/client-sso': 3.936.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/token-providers': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-process@3.873.0':
+ '@aws-sdk/credential-provider-web-identity@3.936.0':
dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-process@3.908.0':
- dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-sso@3.873.0':
- dependencies:
- '@aws-sdk/client-sso': 3.873.0
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/token-providers': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/nested-clients': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-sso@3.908.0':
+ '@aws-sdk/lib-storage@3.937.0(@aws-sdk/client-s3@3.937.0)':
dependencies:
- '@aws-sdk/client-sso': 3.908.0
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/token-providers': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - aws-crt
-
- '@aws-sdk/credential-provider-web-identity@3.873.0':
- dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/nested-clients': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/property-provider': 4.2.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - aws-crt
-
- '@aws-sdk/credential-provider-web-identity@3.908.0':
- dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/nested-clients': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - aws-crt
-
- '@aws-sdk/lib-storage@3.908.0(@aws-sdk/client-s3@3.908.0)':
- dependencies:
- '@aws-sdk/client-s3': 3.908.0
- '@smithy/abort-controller': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/smithy-client': 4.7.1
+ '@aws-sdk/client-s3': 3.937.0
+ '@smithy/abort-controller': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/smithy-client': 4.9.8
buffer: 5.6.0
events: 3.3.0
stream-browserify: 3.0.0
tslib: 2.8.1
- '@aws-sdk/middleware-bucket-endpoint@3.901.0':
+ '@aws-sdk/middleware-bucket-endpoint@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
+ '@aws-sdk/types': 3.936.0
'@aws-sdk/util-arn-parser': 3.893.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
'@smithy/util-config-provider': 4.2.0
tslib: 2.8.1
- '@aws-sdk/middleware-expect-continue@3.901.0':
+ '@aws-sdk/middleware-expect-continue@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-flexible-checksums@3.908.0':
+ '@aws-sdk/middleware-flexible-checksums@3.936.0':
dependencies:
'@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/types': 3.901.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/types': 3.936.0
'@smithy/is-array-buffer': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-stream': 4.5.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-stream': 4.5.6
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@aws-sdk/middleware-host-header@3.873.0':
+ '@aws-sdk/middleware-host-header@3.936.0':
dependencies:
- '@aws-sdk/types': 3.862.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-host-header@3.901.0':
+ '@aws-sdk/middleware-location-constraint@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-location-constraint@3.901.0':
+ '@aws-sdk/middleware-logger@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-logger@3.873.0':
+ '@aws-sdk/middleware-recursion-detection@3.936.0':
dependencies:
- '@aws-sdk/types': 3.862.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@aws/lambda-invoke-store': 0.2.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-logger@3.901.0':
+ '@aws-sdk/middleware-sdk-s3@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/middleware-recursion-detection@3.873.0':
- dependencies:
- '@aws-sdk/types': 3.862.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/middleware-recursion-detection@3.901.0':
- dependencies:
- '@aws-sdk/types': 3.901.0
- '@aws/lambda-invoke-store': 0.0.1
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/middleware-sdk-s3@3.908.0':
- dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/types': 3.901.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/types': 3.936.0
'@aws-sdk/util-arn-parser': 3.893.0
- '@smithy/core': 3.15.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/signature-v4': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
+ '@smithy/core': 3.18.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
'@smithy/util-config-provider': 4.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-stream': 4.5.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-stream': 4.5.6
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@aws-sdk/middleware-ssec@3.901.0':
+ '@aws-sdk/middleware-ssec@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-user-agent@3.873.0':
+ '@aws-sdk/middleware-user-agent@3.936.0':
dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@aws-sdk/util-endpoints': 3.873.0
- '@smithy/core': 3.15.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@smithy/core': 3.18.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-user-agent@3.908.0':
- dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/util-endpoints': 3.901.0
- '@smithy/core': 3.15.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/nested-clients@3.873.0':
+ '@aws-sdk/nested-clients@3.936.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/middleware-host-header': 3.873.0
- '@aws-sdk/middleware-logger': 3.873.0
- '@aws-sdk/middleware-recursion-detection': 3.873.0
- '@aws-sdk/middleware-user-agent': 3.873.0
- '@aws-sdk/region-config-resolver': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@aws-sdk/util-endpoints': 3.873.0
- '@aws-sdk/util-user-agent-browser': 3.873.0
- '@aws-sdk/util-user-agent-node': 3.873.0
- '@smithy/config-resolver': 4.3.0
- '@smithy/core': 3.15.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/hash-node': 4.2.0
- '@smithy/invalid-dependency': 4.2.0
- '@smithy/middleware-content-length': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-retry': 4.4.1
- '@smithy/middleware-serde': 4.2.0
- '@smithy/middleware-stack': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/node-http-handler': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.936.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.936.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.5
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.0
- '@smithy/util-defaults-mode-node': 4.2.1
- '@smithy/util-endpoints': 3.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
+ '@smithy/util-defaults-mode-browser': 4.3.11
+ '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/nested-clients@3.908.0':
+ '@aws-sdk/region-config-resolver@3.936.0':
dependencies:
- '@aws-crypto/sha256-browser': 5.2.0
- '@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/middleware-host-header': 3.901.0
- '@aws-sdk/middleware-logger': 3.901.0
- '@aws-sdk/middleware-recursion-detection': 3.901.0
- '@aws-sdk/middleware-user-agent': 3.908.0
- '@aws-sdk/region-config-resolver': 3.901.0
- '@aws-sdk/types': 3.901.0
- '@aws-sdk/util-endpoints': 3.901.0
- '@aws-sdk/util-user-agent-browser': 3.907.0
- '@aws-sdk/util-user-agent-node': 3.908.0
- '@smithy/config-resolver': 4.3.0
- '@smithy/core': 3.15.0
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/hash-node': 4.2.0
- '@smithy/invalid-dependency': 4.2.0
- '@smithy/middleware-content-length': 4.2.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-retry': 4.4.1
- '@smithy/middleware-serde': 4.2.0
- '@smithy/middleware-stack': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/node-http-handler': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
- '@smithy/util-base64': 4.3.0
- '@smithy/util-body-length-browser': 4.2.0
- '@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.0
- '@smithy/util-defaults-mode-node': 4.2.1
- '@smithy/util-endpoints': 3.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
- '@smithy/util-utf8': 4.2.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/signature-v4-multi-region@3.936.0':
+ dependencies:
+ '@aws-sdk/middleware-sdk-s3': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/token-providers@3.936.0':
+ dependencies:
+ '@aws-sdk/core': 3.936.0
+ '@aws-sdk/nested-clients': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/region-config-resolver@3.873.0':
+ '@aws-sdk/types@3.936.0':
dependencies:
- '@aws-sdk/types': 3.862.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/types': 4.6.0
- '@smithy/util-config-provider': 4.2.0
- '@smithy/util-middleware': 4.2.0
- tslib: 2.8.1
-
- '@aws-sdk/region-config-resolver@3.901.0':
- dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/types': 4.6.0
- '@smithy/util-config-provider': 4.2.0
- '@smithy/util-middleware': 4.2.0
- tslib: 2.8.1
-
- '@aws-sdk/signature-v4-multi-region@3.908.0':
- dependencies:
- '@aws-sdk/middleware-sdk-s3': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/signature-v4': 5.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/token-providers@3.873.0':
- dependencies:
- '@aws-sdk/core': 3.873.0
- '@aws-sdk/nested-clients': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - aws-crt
-
- '@aws-sdk/token-providers@3.908.0':
- dependencies:
- '@aws-sdk/core': 3.908.0
- '@aws-sdk/nested-clients': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - aws-crt
-
- '@aws-sdk/types@3.862.0':
- dependencies:
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/types@3.901.0':
- dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
'@aws-sdk/util-arn-parser@3.893.0':
dependencies:
tslib: 2.8.1
- '@aws-sdk/util-endpoints@3.873.0':
+ '@aws-sdk/util-endpoints@3.936.0':
dependencies:
- '@aws-sdk/types': 3.862.0
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
- '@smithy/util-endpoints': 3.2.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-endpoints': 3.2.5
tslib: 2.8.1
- '@aws-sdk/util-endpoints@3.901.0':
- dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
- '@smithy/util-endpoints': 3.2.0
- tslib: 2.8.1
-
- '@aws-sdk/util-locate-window@3.208.0':
+ '@aws-sdk/util-locate-window@3.893.0':
dependencies:
tslib: 2.8.1
- '@aws-sdk/util-user-agent-browser@3.873.0':
+ '@aws-sdk/util-user-agent-browser@3.936.0':
dependencies:
- '@aws-sdk/types': 3.862.0
- '@smithy/types': 4.6.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
bowser: 2.12.1
tslib: 2.8.1
- '@aws-sdk/util-user-agent-browser@3.907.0':
+ '@aws-sdk/util-user-agent-node@3.936.0':
dependencies:
- '@aws-sdk/types': 3.901.0
- '@smithy/types': 4.6.0
- bowser: 2.12.1
+ '@aws-sdk/middleware-user-agent': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/util-user-agent-node@3.873.0':
+ '@aws-sdk/xml-builder@3.930.0':
dependencies:
- '@aws-sdk/middleware-user-agent': 3.873.0
- '@aws-sdk/types': 3.862.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/util-user-agent-node@3.908.0':
- dependencies:
- '@aws-sdk/middleware-user-agent': 3.908.0
- '@aws-sdk/types': 3.901.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/xml-builder@3.873.0':
- dependencies:
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@aws-sdk/xml-builder@3.901.0':
- dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
fast-xml-parser: 5.2.5
tslib: 2.8.1
- '@aws/lambda-invoke-store@0.0.1': {}
+ '@aws/lambda-invoke-store@0.2.0': {}
'@babel/code-frame@7.27.1':
dependencies:
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.28.4': {}
+ '@babel/compat-data@7.28.5': {}
- '@babel/core@7.28.4':
+ '@babel/core@7.28.5':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
+ '@babel/generator': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helpers': 7.28.4
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.28.3':
+ '@babel/generator@7.28.5':
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
'@babel/helper-compilation-targets@7.27.2':
dependencies:
- '@babel/compat-data': 7.28.4
+ '@babel/compat-data': 7.28.5
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.26.3
+ browserslist: 4.28.0
lru-cache: 5.1.1
semver: 6.3.1
@@ -11566,155 +11433,161 @@ snapshots:
'@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.27.1': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
'@babel/helper-validator-option@7.27.1': {}
'@babel/helpers@7.28.4':
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
- '@babel/parser@7.28.4':
+ '@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.4
-
- '@babel/runtime@7.27.0':
- dependencies:
- regenerator-runtime: 0.14.0
+ '@babel/types': 7.28.5
'@babel/runtime@7.28.4': {}
'@babel/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
- '@babel/traverse@7.28.4':
+ '@babel/traverse@7.28.5':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
+ '@babel/generator': 7.28.5
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@babel/template': 7.27.2
- '@babel/types': 7.28.4
- debug: 4.4.3(supports-color@10.2.0)
+ '@babel/types': 7.28.5
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
- '@babel/types@7.28.4':
+ '@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@bcoe/v8-coverage@1.0.2': {}
- '@canvas/image-data@1.0.0': {}
+ '@borewit/text-codec@0.1.1': {}
+
+ '@canvas/image-data@1.1.0': {}
'@chainsafe/is-ip@2.1.0': {}
- '@cropper/element-canvas@2.0.1':
+ '@cropper/element-canvas@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-crosshair@2.0.1':
+ '@cropper/element-crosshair@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-grid@2.0.1':
+ '@cropper/element-grid@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-handle@2.0.1':
+ '@cropper/element-handle@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-image@2.0.1':
+ '@cropper/element-image@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/element-canvas': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/element-canvas': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-selection@2.0.1':
+ '@cropper/element-selection@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/element-canvas': 2.0.1
- '@cropper/element-image': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/element-canvas': 2.1.0
+ '@cropper/element-image': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-shade@2.0.1':
+ '@cropper/element-shade@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/element-canvas': 2.0.1
- '@cropper/element-selection': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/element-canvas': 2.1.0
+ '@cropper/element-selection': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element-viewer@2.0.1':
+ '@cropper/element-viewer@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/element-canvas': 2.0.1
- '@cropper/element-image': 2.0.1
- '@cropper/element-selection': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/element-canvas': 2.1.0
+ '@cropper/element-image': 2.1.0
+ '@cropper/element-selection': 2.1.0
+ '@cropper/utils': 2.1.0
- '@cropper/element@2.0.1':
+ '@cropper/element@2.1.0':
dependencies:
- '@cropper/utils': 2.0.1
+ '@cropper/utils': 2.1.0
- '@cropper/elements@2.0.1':
+ '@cropper/elements@2.1.0':
dependencies:
- '@cropper/element': 2.0.1
- '@cropper/element-canvas': 2.0.1
- '@cropper/element-crosshair': 2.0.1
- '@cropper/element-grid': 2.0.1
- '@cropper/element-handle': 2.0.1
- '@cropper/element-image': 2.0.1
- '@cropper/element-selection': 2.0.1
- '@cropper/element-shade': 2.0.1
- '@cropper/element-viewer': 2.0.1
+ '@cropper/element': 2.1.0
+ '@cropper/element-canvas': 2.1.0
+ '@cropper/element-crosshair': 2.1.0
+ '@cropper/element-grid': 2.1.0
+ '@cropper/element-handle': 2.1.0
+ '@cropper/element-image': 2.1.0
+ '@cropper/element-selection': 2.1.0
+ '@cropper/element-shade': 2.1.0
+ '@cropper/element-viewer': 2.1.0
- '@cropper/utils@2.0.1': {}
+ '@cropper/utils@2.1.0': {}
- '@csstools/color-helpers@5.0.1': {}
+ '@csstools/color-helpers@5.1.0':
+ optional: true
- '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ optional: true
- '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/color-helpers': 5.0.1
- '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/color-helpers': 5.1.0
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ optional: true
- '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-tokenizer': 3.0.4
+ optional: true
- '@csstools/css-tokenizer@3.0.3': {}
+ '@csstools/css-syntax-patches-for-csstree@1.0.16':
+ optional: true
+
+ '@csstools/css-tokenizer@3.0.4':
+ optional: true
'@cypress/request@3.0.9':
dependencies:
@@ -11724,7 +11597,7 @@ snapshots:
combined-stream: 1.0.8
extend: 3.0.2
forever-agent: 0.6.1
- form-data: 4.0.4
+ form-data: 4.0.5
http-signature: 1.4.0
is-typedarray: 1.0.0
isstream: 0.1.2
@@ -11744,13 +11617,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@digitalbazaar/http-client@3.4.1(web-streams-polyfill@4.0.0)':
+ '@digitalbazaar/http-client@4.2.0':
dependencies:
- ky: 0.33.3
- ky-universal: 0.11.0(ky@0.33.3)(web-streams-polyfill@4.0.0)
- undici: 5.28.5
- transitivePeerDependencies:
- - web-streams-polyfill
+ ky: 1.14.0
+ undici: 6.22.0
'@discordapp/twemoji@16.0.1':
dependencies:
@@ -11759,221 +11629,305 @@ snapshots:
jsonfile: 5.0.0
universalify: 0.1.2
- '@emnapi/runtime@1.4.3':
+ '@emnapi/runtime@1.7.1':
dependencies:
tslib: 2.8.1
optional: true
'@epic-web/invariant@1.0.0': {}
- '@esbuild/aix-ppc64@0.25.10':
+ '@esbuild/aix-ppc64@0.25.11':
optional: true
- '@esbuild/android-arm64@0.25.10':
+ '@esbuild/aix-ppc64@0.27.0':
optional: true
- '@esbuild/android-arm@0.25.10':
+ '@esbuild/android-arm64@0.25.11':
optional: true
- '@esbuild/android-x64@0.25.10':
+ '@esbuild/android-arm64@0.27.0':
optional: true
- '@esbuild/darwin-arm64@0.25.10':
+ '@esbuild/android-arm@0.25.11':
optional: true
- '@esbuild/darwin-x64@0.25.10':
+ '@esbuild/android-arm@0.27.0':
optional: true
- '@esbuild/freebsd-arm64@0.25.10':
+ '@esbuild/android-x64@0.25.11':
optional: true
- '@esbuild/freebsd-x64@0.25.10':
+ '@esbuild/android-x64@0.27.0':
optional: true
- '@esbuild/linux-arm64@0.25.10':
+ '@esbuild/darwin-arm64@0.25.11':
optional: true
- '@esbuild/linux-arm@0.25.10':
+ '@esbuild/darwin-arm64@0.27.0':
optional: true
- '@esbuild/linux-ia32@0.25.10':
+ '@esbuild/darwin-x64@0.25.11':
optional: true
- '@esbuild/linux-loong64@0.25.10':
+ '@esbuild/darwin-x64@0.27.0':
optional: true
- '@esbuild/linux-mips64el@0.25.10':
+ '@esbuild/freebsd-arm64@0.25.11':
optional: true
- '@esbuild/linux-ppc64@0.25.10':
+ '@esbuild/freebsd-arm64@0.27.0':
optional: true
- '@esbuild/linux-riscv64@0.25.10':
+ '@esbuild/freebsd-x64@0.25.11':
optional: true
- '@esbuild/linux-s390x@0.25.10':
+ '@esbuild/freebsd-x64@0.27.0':
optional: true
- '@esbuild/linux-x64@0.25.10':
+ '@esbuild/linux-arm64@0.25.11':
optional: true
- '@esbuild/netbsd-arm64@0.25.10':
+ '@esbuild/linux-arm64@0.27.0':
optional: true
- '@esbuild/netbsd-x64@0.25.10':
+ '@esbuild/linux-arm@0.25.11':
optional: true
- '@esbuild/openbsd-arm64@0.25.10':
+ '@esbuild/linux-arm@0.27.0':
optional: true
- '@esbuild/openbsd-x64@0.25.10':
+ '@esbuild/linux-ia32@0.25.11':
optional: true
- '@esbuild/openharmony-arm64@0.25.10':
+ '@esbuild/linux-ia32@0.27.0':
optional: true
- '@esbuild/sunos-x64@0.25.10':
+ '@esbuild/linux-loong64@0.25.11':
optional: true
- '@esbuild/win32-arm64@0.25.10':
+ '@esbuild/linux-loong64@0.27.0':
optional: true
- '@esbuild/win32-ia32@0.25.10':
+ '@esbuild/linux-mips64el@0.25.11':
optional: true
- '@esbuild/win32-x64@0.25.10':
+ '@esbuild/linux-mips64el@0.27.0':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0)':
+ '@esbuild/linux-ppc64@0.25.11':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.11':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.11':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.0':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.11':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.0':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.11':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.11':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.0':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.11':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.11':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.0':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.11':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.11':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.0':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.11':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.11':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.0':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.11':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.0':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
dependencies:
- eslint: 9.37.0
+ eslint: 9.39.1
eslint-visitor-keys: 3.4.3
- '@eslint-community/regexpp@4.12.1': {}
+ '@eslint-community/regexpp@4.12.2': {}
- '@eslint/compat@1.1.1': {}
-
- '@eslint/config-array@0.21.0':
+ '@eslint/compat@1.4.0(eslint@9.39.1)':
dependencies:
- '@eslint/object-schema': 2.1.6
- debug: 4.4.3(supports-color@10.2.0)
+ '@eslint/core': 0.16.0
+ optionalDependencies:
+ eslint: 9.39.1
+
+ '@eslint/config-array@0.21.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3(supports-color@10.2.2)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.4.0':
+ '@eslint/config-helpers@0.4.2':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
'@eslint/core@0.16.0':
dependencies:
'@types/json-schema': 7.0.15
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.37.0': {}
+ '@eslint/js@9.39.1': {}
- '@eslint/object-schema@2.1.6': {}
+ '@eslint/object-schema@2.1.7': {}
- '@eslint/plugin-kit@0.4.0':
+ '@eslint/plugin-kit@0.4.1':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
levn: 0.4.1
- '@fastify/accept-negotiator@2.0.0': {}
+ '@fastify/accept-negotiator@2.0.1': {}
'@fastify/accepts@5.0.3':
dependencies:
accepts: 1.3.8
- fastify-plugin: 5.0.0
+ fastify-plugin: 5.1.0
- '@fastify/ajv-compiler@4.0.0':
+ '@fastify/ajv-compiler@4.0.5':
dependencies:
ajv: 8.17.1
ajv-formats: 3.0.1(ajv@8.17.1)
- fast-uri: 3.0.1
+ fast-uri: 3.1.0
- '@fastify/busboy@2.1.0': {}
-
- '@fastify/busboy@3.0.0': {}
+ '@fastify/busboy@3.2.0': {}
'@fastify/cookie@11.0.2':
dependencies:
cookie: 1.0.2
- fastify-plugin: 5.0.0
+ fastify-plugin: 5.1.0
- '@fastify/cors@10.1.0':
+ '@fastify/cors@11.1.0':
dependencies:
- fastify-plugin: 5.0.0
- mnemonist: 0.40.0
+ fastify-plugin: 5.1.0
+ toad-cache: 3.7.0
'@fastify/deepmerge@3.1.0': {}
- '@fastify/error@4.0.0': {}
+ '@fastify/error@4.2.0': {}
'@fastify/express@4.0.2':
dependencies:
express: 4.21.2
- fastify-plugin: 5.0.0
+ fastify-plugin: 5.1.0
transitivePeerDependencies:
- supports-color
- '@fastify/fast-json-stringify-compiler@5.0.0':
+ '@fastify/fast-json-stringify-compiler@5.0.3':
dependencies:
- fast-json-stringify: 6.0.0
+ fast-json-stringify: 6.1.1
- '@fastify/forwarded@3.0.0': {}
+ '@fastify/forwarded@3.0.1': {}
- '@fastify/http-proxy@10.0.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)':
+ '@fastify/http-proxy@11.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)':
dependencies:
- '@fastify/reply-from': 11.0.0
+ '@fastify/reply-from': 12.4.0
fast-querystring: 1.1.2
- fastify-plugin: 5.0.0
+ fastify-plugin: 5.1.0
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- '@fastify/merge-json-schemas@0.1.1':
+ '@fastify/merge-json-schemas@0.2.1':
dependencies:
- fast-deep-equal: 3.1.3
+ dequal: 2.0.3
- '@fastify/multipart@9.2.1':
+ '@fastify/multipart@9.3.0':
dependencies:
- '@fastify/busboy': 3.0.0
+ '@fastify/busboy': 3.2.0
'@fastify/deepmerge': 3.1.0
- '@fastify/error': 4.0.0
- fastify-plugin: 5.0.0
- secure-json-parse: 4.0.0
+ '@fastify/error': 4.2.0
+ fastify-plugin: 5.1.0
+ secure-json-parse: 4.1.0
- '@fastify/proxy-addr@5.0.0':
+ '@fastify/proxy-addr@5.1.0':
dependencies:
- '@fastify/forwarded': 3.0.0
+ '@fastify/forwarded': 3.0.1
ipaddr.js: 2.2.0
- '@fastify/reply-from@11.0.0':
+ '@fastify/reply-from@12.4.0':
dependencies:
- '@fastify/error': 4.0.0
+ '@fastify/error': 4.2.0
end-of-stream: 1.4.5
- fast-content-type-parse: 2.0.0
+ fast-content-type-parse: 3.0.0
fast-querystring: 1.1.2
- fastify-plugin: 4.5.1
+ fastify-plugin: 5.1.0
toad-cache: 3.7.0
- undici: 6.19.8
+ undici: 7.16.0
- '@fastify/send@4.0.0':
+ '@fastify/send@4.1.0':
dependencies:
'@lukeed/ms': 2.0.2
escape-html: 1.0.3
@@ -11981,19 +11935,19 @@ snapshots:
http-errors: 2.0.0
mime: 3.0.0
- '@fastify/static@8.2.0':
+ '@fastify/static@8.3.0':
dependencies:
- '@fastify/accept-negotiator': 2.0.0
- '@fastify/send': 4.0.0
+ '@fastify/accept-negotiator': 2.0.1
+ '@fastify/send': 4.1.0
content-disposition: 0.5.4
- fastify-plugin: 5.0.0
- fastq: 1.17.1
- glob: 11.0.3
+ fastify-plugin: 5.1.0
+ fastq: 1.19.1
+ glob: 11.1.0
- '@fastify/view@10.0.2':
+ '@file-type/xml@0.4.4':
dependencies:
- fastify-plugin: 5.0.0
- toad-cache: 3.7.0
+ sax: 1.4.3
+ strtok3: 10.3.4
'@github/webauthn-json@2.1.1': {}
@@ -12015,7 +11969,7 @@ snapshots:
'@hapi/pinpoint@2.0.1': {}
- '@hapi/tlds@1.1.3': {}
+ '@hapi/tlds@1.1.4': {}
'@hapi/topo@5.1.0':
dependencies:
@@ -12025,13 +11979,13 @@ snapshots:
dependencies:
'@hapi/hoek': 11.0.7
- '@hapi/wreck@18.0.1':
+ '@hapi/wreck@18.1.0':
dependencies:
'@hapi/boom': 10.0.1
'@hapi/bourne': 3.0.0
'@hapi/hoek': 11.0.7
- '@hexagon/base64@1.1.27': {}
+ '@hexagon/base64@1.1.28': {}
'@humanfs/core@0.19.1': {}
@@ -12112,7 +12066,7 @@ snapshots:
'@img/sharp-wasm32@0.33.5':
dependencies:
- '@emnapi/runtime': 1.4.3
+ '@emnapi/runtime': 1.7.1
optional: true
'@img/sharp-win32-ia32@0.33.5':
@@ -12121,33 +12075,33 @@ snapshots:
'@img/sharp-win32-x64@0.33.5':
optional: true
- '@inquirer/ansi@1.0.0': {}
+ '@inquirer/ansi@1.0.2': {}
- '@inquirer/confirm@5.1.18(@types/node@22.18.10)':
+ '@inquirer/confirm@5.1.21(@types/node@24.10.1)':
dependencies:
- '@inquirer/core': 10.2.2(@types/node@22.18.10)
- '@inquirer/type': 3.0.8(@types/node@22.18.10)
+ '@inquirer/core': 10.3.2(@types/node@24.10.1)
+ '@inquirer/type': 3.0.10(@types/node@24.10.1)
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@inquirer/core@10.2.2(@types/node@22.18.10)':
+ '@inquirer/core@10.3.2(@types/node@24.10.1)':
dependencies:
- '@inquirer/ansi': 1.0.0
- '@inquirer/figures': 1.0.13
- '@inquirer/type': 3.0.8(@types/node@22.18.10)
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@24.10.1)
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@inquirer/figures@1.0.13': {}
+ '@inquirer/figures@1.0.15': {}
- '@inquirer/type@3.0.8(@types/node@22.18.10)':
+ '@inquirer/type@3.0.10(@types/node@24.10.1)':
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@ioredis/commands@1.4.0': {}
@@ -12170,8 +12124,6 @@ snapshots:
dependencies:
minipass: 7.1.2
- '@istanbuljs/schema@0.1.3': {}
-
'@jest/schemas@29.6.3':
dependencies:
'@sinclair/typebox': 0.27.8
@@ -12181,16 +12133,16 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 22.18.10
- '@types/yargs': 17.0.33
+ '@types/node': 24.10.1
+ '@types/yargs': 17.0.34
chalk: 4.1.2
- '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))':
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
dependencies:
- glob: 10.4.5
- magic-string: 0.30.19
+ glob: 10.5.0
+ magic-string: 0.30.21
react-docgen-typescript: 2.4.0(typescript@5.9.3)
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
optionalDependencies:
typescript: 5.9.3
@@ -12206,7 +12158,7 @@ snapshots:
'@jridgewell/resolve-uri@3.1.2': {}
- '@jridgewell/source-map@0.3.6':
+ '@jridgewell/source-map@0.3.11':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
@@ -12220,17 +12172,29 @@ snapshots:
'@keyv/serialize@1.1.1': {}
- '@kurkle/color@0.3.2': {}
+ '@kitajs/html@4.2.11':
+ dependencies:
+ csstype: 3.2.3
- '@levischuck/tiny-cbor@0.2.2': {}
+ '@kitajs/ts-html-plugin@4.1.3(@kitajs/html@4.2.11)(typescript@5.9.3)':
+ dependencies:
+ '@kitajs/html': 4.2.11
+ chalk: 5.6.2
+ tslib: 2.8.1
+ typescript: 5.9.3
+ yargs: 18.0.0
- '@lukeed/csprng@1.0.1': {}
+ '@kurkle/color@0.3.4': {}
+
+ '@levischuck/tiny-cbor@0.2.11': {}
+
+ '@lukeed/csprng@1.1.0': {}
'@lukeed/ms@2.0.2': {}
'@mapbox/node-pre-gyp@1.0.9(encoding@0.1.13)':
dependencies:
- detect-libc: 2.1.1
+ detect-libc: 2.1.2
https-proxy-agent: 5.0.1
make-dir: 3.1.0
node-fetch: 2.7.0(encoding@0.1.13)
@@ -12250,58 +12214,60 @@ snapshots:
dependencies:
'@mcaptcha/core-glue': 0.1.0-alpha-5
- '@mdx-js/react@3.0.1(@types/react@18.0.28)(react@19.2.0)':
+ '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@types/mdx': 2.0.3
- '@types/react': 18.0.28
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.2
react: 19.2.0
- '@microsoft/api-extractor-model@7.31.1(@types/node@22.18.10)':
+ '@microsoft/api-extractor-model@7.32.1(@types/node@24.10.1)':
dependencies:
- '@microsoft/tsdoc': 0.15.1
- '@microsoft/tsdoc-config': 0.17.1
- '@rushstack/node-core-library': 5.17.0(@types/node@22.18.10)
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.0
+ '@rushstack/node-core-library': 5.19.0(@types/node@24.10.1)
transitivePeerDependencies:
- '@types/node'
- '@microsoft/api-extractor@7.53.1(@types/node@22.18.10)':
+ '@microsoft/api-extractor@7.55.1(@types/node@24.10.1)':
dependencies:
- '@microsoft/api-extractor-model': 7.31.1(@types/node@22.18.10)
- '@microsoft/tsdoc': 0.15.1
- '@microsoft/tsdoc-config': 0.17.1
- '@rushstack/node-core-library': 5.17.0(@types/node@22.18.10)
+ '@microsoft/api-extractor-model': 7.32.1(@types/node@24.10.1)
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.0
+ '@rushstack/node-core-library': 5.19.0(@types/node@24.10.1)
'@rushstack/rig-package': 0.6.0
- '@rushstack/terminal': 0.19.1(@types/node@22.18.10)
- '@rushstack/ts-command-line': 5.1.1(@types/node@22.18.10)
+ '@rushstack/terminal': 0.19.4(@types/node@24.10.1)
+ '@rushstack/ts-command-line': 5.1.4(@types/node@24.10.1)
+ diff: 8.0.2
lodash: 4.17.21
minimatch: 10.0.3
- resolve: 1.22.10
+ resolve: 1.22.11
semver: 7.5.4
source-map: 0.6.1
typescript: 5.8.2
transitivePeerDependencies:
- '@types/node'
- '@microsoft/tsdoc-config@0.17.1':
+ '@microsoft/tsdoc-config@0.18.0':
dependencies:
- '@microsoft/tsdoc': 0.15.1
+ '@microsoft/tsdoc': 0.16.0
ajv: 8.12.0
jju: 1.4.0
- resolve: 1.22.10
+ resolve: 1.22.11
- '@microsoft/tsdoc@0.15.1': {}
+ '@microsoft/tsdoc@0.16.0': {}
'@misskey-dev/browser-image-resizer@2024.1.0': {}
- '@misskey-dev/eslint-plugin@2.1.0(@eslint/compat@1.1.1)(@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0))(eslint@9.37.0)(globals@16.4.0)':
+ '@misskey-dev/eslint-plugin@2.2.0(@eslint/compat@1.4.0(eslint@9.39.1))(@eslint/js@9.39.1)(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)(globals@16.5.0)':
dependencies:
- '@eslint/compat': 1.1.1
- '@stylistic/eslint-plugin': 2.13.0(eslint@9.37.0)(typescript@5.9.3)
- '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)
- '@typescript-eslint/parser': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- eslint: 9.37.0
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)
- globals: 16.4.0
+ '@eslint/compat': 1.4.0(eslint@9.39.1)
+ '@eslint/js': 9.39.1
+ '@stylistic/eslint-plugin': 5.5.0(eslint@9.39.1)
+ '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ eslint: 9.39.1
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ globals: 16.5.0
'@misskey-dev/sharp-read-bmp@1.2.0':
dependencies:
@@ -12309,35 +12275,35 @@ snapshots:
decode-ico: 0.4.1
sharp: 0.33.5
- '@misskey-dev/summaly@5.2.4':
+ '@misskey-dev/summaly@5.2.5':
dependencies:
cheerio: 1.1.2
escape-regexp: 0.0.1
- got: 14.5.0
+ got: 14.6.4
html-entities: 2.6.0
iconv-lite: 0.7.0
jschardet: 3.1.4
private-ip: 3.0.2
- '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2':
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
optional: true
- '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2':
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
optional: true
- '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2':
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
optional: true
- '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2':
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
optional: true
- '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2':
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
optional: true
- '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2':
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
optional: true
- '@mswjs/interceptors@0.39.7':
+ '@mswjs/interceptors@0.40.0':
dependencies:
'@open-draft/deferred-promise': 2.2.0
'@open-draft/logger': 0.3.0
@@ -12346,54 +12312,126 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
- '@napi-rs/canvas-android-arm64@0.1.80':
+ '@napi-rs/canvas-android-arm64@0.1.82':
optional: true
- '@napi-rs/canvas-darwin-arm64@0.1.80':
+ '@napi-rs/canvas-darwin-arm64@0.1.82':
optional: true
- '@napi-rs/canvas-darwin-x64@0.1.80':
+ '@napi-rs/canvas-darwin-x64@0.1.82':
optional: true
- '@napi-rs/canvas-linux-arm-gnueabihf@0.1.80':
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.82':
optional: true
- '@napi-rs/canvas-linux-arm64-gnu@0.1.80':
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.82':
optional: true
- '@napi-rs/canvas-linux-arm64-musl@0.1.80':
+ '@napi-rs/canvas-linux-arm64-musl@0.1.82':
optional: true
- '@napi-rs/canvas-linux-riscv64-gnu@0.1.80':
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.82':
optional: true
- '@napi-rs/canvas-linux-x64-gnu@0.1.80':
+ '@napi-rs/canvas-linux-x64-gnu@0.1.82':
optional: true
- '@napi-rs/canvas-linux-x64-musl@0.1.80':
+ '@napi-rs/canvas-linux-x64-musl@0.1.82':
optional: true
- '@napi-rs/canvas-win32-x64-msvc@0.1.80':
+ '@napi-rs/canvas-win32-x64-msvc@0.1.82':
optional: true
- '@napi-rs/canvas@0.1.80':
+ '@napi-rs/canvas@0.1.82':
optionalDependencies:
- '@napi-rs/canvas-android-arm64': 0.1.80
- '@napi-rs/canvas-darwin-arm64': 0.1.80
- '@napi-rs/canvas-darwin-x64': 0.1.80
- '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.80
- '@napi-rs/canvas-linux-arm64-gnu': 0.1.80
- '@napi-rs/canvas-linux-arm64-musl': 0.1.80
- '@napi-rs/canvas-linux-riscv64-gnu': 0.1.80
- '@napi-rs/canvas-linux-x64-gnu': 0.1.80
- '@napi-rs/canvas-linux-x64-musl': 0.1.80
- '@napi-rs/canvas-win32-x64-msvc': 0.1.80
+ '@napi-rs/canvas-android-arm64': 0.1.82
+ '@napi-rs/canvas-darwin-arm64': 0.1.82
+ '@napi-rs/canvas-darwin-x64': 0.1.82
+ '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.82
+ '@napi-rs/canvas-linux-arm64-gnu': 0.1.82
+ '@napi-rs/canvas-linux-arm64-musl': 0.1.82
+ '@napi-rs/canvas-linux-riscv64-gnu': 0.1.82
+ '@napi-rs/canvas-linux-x64-gnu': 0.1.82
+ '@napi-rs/canvas-linux-x64-musl': 0.1.82
+ '@napi-rs/canvas-win32-x64-msvc': 0.1.82
- '@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ '@napi-rs/nice-android-arm-eabi@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-android-arm64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-darwin-arm64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-darwin-x64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-freebsd-x64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm-gnueabihf@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm64-musl@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-ppc64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-riscv64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-s390x-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-x64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-x64-musl@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-openharmony-arm64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-win32-arm64-msvc@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-win32-ia32-msvc@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-win32-x64-msvc@1.1.1':
+ optional: true
+
+ '@napi-rs/nice@1.1.1':
+ optionalDependencies:
+ '@napi-rs/nice-android-arm-eabi': 1.1.1
+ '@napi-rs/nice-android-arm64': 1.1.1
+ '@napi-rs/nice-darwin-arm64': 1.1.1
+ '@napi-rs/nice-darwin-x64': 1.1.1
+ '@napi-rs/nice-freebsd-x64': 1.1.1
+ '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1
+ '@napi-rs/nice-linux-arm64-gnu': 1.1.1
+ '@napi-rs/nice-linux-arm64-musl': 1.1.1
+ '@napi-rs/nice-linux-ppc64-gnu': 1.1.1
+ '@napi-rs/nice-linux-riscv64-gnu': 1.1.1
+ '@napi-rs/nice-linux-s390x-gnu': 1.1.1
+ '@napi-rs/nice-linux-x64-gnu': 1.1.1
+ '@napi-rs/nice-linux-x64-musl': 1.1.1
+ '@napi-rs/nice-openharmony-arm64': 1.1.1
+ '@napi-rs/nice-win32-arm64-msvc': 1.1.1
+ '@napi-rs/nice-win32-ia32-msvc': 1.1.1
+ '@napi-rs/nice-win32-x64-msvc': 1.1.1
+ optional: true
+
+ '@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies:
- file-type: 21.0.0
+ file-type: 21.1.0
iterare: 1.2.1
- load-esm: 1.0.2
+ load-esm: 1.0.3
reflect-metadata: 0.2.2
rxjs: 7.8.2
tslib: 2.8.1
@@ -12401,39 +12439,39 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@nestjs/core@11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ '@nestjs/core@11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies:
- '@nestjs/common': 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/common': 11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nuxt/opencollective': 0.4.1
fast-safe-stringify: 2.1.1
iterare: 1.2.1
- path-to-regexp: 8.2.0
+ path-to-regexp: 8.3.0
reflect-metadata: 0.2.2
rxjs: 7.8.2
tslib: 2.8.1
uid: 2.0.2
optionalDependencies:
- '@nestjs/platform-express': 10.4.20(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)
+ '@nestjs/platform-express': 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)
- '@nestjs/platform-express@10.4.20(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)':
+ '@nestjs/platform-express@11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)':
dependencies:
- '@nestjs/common': 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- body-parser: 1.20.3
+ '@nestjs/common': 11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2)
cors: 2.8.5
- express: 4.21.2
+ express: 5.1.0
multer: 2.0.2
+ path-to-regexp: 8.3.0
tslib: 2.8.1
transitivePeerDependencies:
- supports-color
- '@nestjs/testing@11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-express@10.4.20)':
+ '@nestjs/testing@11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(@nestjs/platform-express@11.1.9)':
dependencies:
- '@nestjs/common': 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/common': 11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2)
tslib: 2.8.1
optionalDependencies:
- '@nestjs/platform-express': 10.4.20(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)
+ '@nestjs/platform-express': 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)
'@noble/hashes@1.8.0': {}
@@ -12447,13 +12485,13 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
- fastq: 1.17.1
+ fastq: 1.19.1
'@npmcli/agent@3.0.0':
dependencies:
- agent-base: 7.1.3
+ agent-base: 7.1.4
http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6(supports-color@10.2.0)
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
lru-cache: 10.4.3
socks-proxy-agent: 8.0.5
transitivePeerDependencies:
@@ -12465,7 +12503,7 @@ snapshots:
'@nuxt/opencollective@0.4.1':
dependencies:
- consola: 3.4.0
+ consola: 3.4.2
'@one-ini/wasm@0.1.1': {}
@@ -12488,30 +12526,35 @@ snapshots:
'@opentelemetry/api@1.9.0': {}
- '@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
+
+ '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.38.0
'@opentelemetry/instrumentation-amqplib@0.51.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-connect@0.48.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
'@types/connect': 3.4.38
transitivePeerDependencies:
- supports-color
@@ -12526,16 +12569,16 @@ snapshots:
'@opentelemetry/instrumentation-express@0.53.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-fs@0.24.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -12557,9 +12600,9 @@ snapshots:
'@opentelemetry/instrumentation-hapi@0.51.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
@@ -12568,7 +12611,7 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
forwarded-parse: 2.1.2
transitivePeerDependencies:
- supports-color
@@ -12578,7 +12621,7 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/redis-common': 0.38.2
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
@@ -12586,7 +12629,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
@@ -12594,16 +12637,16 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-koa@0.52.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
@@ -12618,16 +12661,16 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-mongoose@0.51.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
@@ -12635,7 +12678,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
'@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -12644,7 +12687,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
'@types/mysql': 2.15.27
transitivePeerDependencies:
- supports-color
@@ -12652,9 +12695,9 @@ snapshots:
'@opentelemetry/instrumentation-pg@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
'@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
'@types/pg': 8.15.5
'@types/pg-pool': 2.0.6
@@ -12666,7 +12709,7 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/redis-common': 0.38.2
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
@@ -12674,7 +12717,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/semantic-conventions': 1.38.0
'@types/tedious': 4.0.14
transitivePeerDependencies:
- supports-color
@@ -12682,7 +12725,7 @@ snapshots:
'@opentelemetry/instrumentation-undici@0.15.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -12692,7 +12735,7 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.204.0
import-in-the-middle: 1.15.0
- require-in-the-middle: 7.3.0
+ require-in-the-middle: 7.5.2
transitivePeerDependencies:
- supports-color
@@ -12702,7 +12745,7 @@ snapshots:
'@opentelemetry/api-logs': 0.57.2
'@types/shimmer': 1.2.0
import-in-the-middle: 1.15.0
- require-in-the-middle: 7.3.0
+ require-in-the-middle: 7.5.2
semver: 7.7.3
shimmer: 1.2.1
transitivePeerDependencies:
@@ -12710,131 +12753,195 @@ snapshots:
'@opentelemetry/redis-common@0.38.2': {}
- '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.38.0
- '@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.38.0
- '@opentelemetry/semantic-conventions@1.37.0': {}
+ '@opentelemetry/semantic-conventions@1.38.0': {}
'@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@paralleldrive/cuid2@2.2.2':
+ '@paralleldrive/cuid2@2.3.1':
dependencies:
'@noble/hashes': 1.8.0
- '@parcel/watcher-android-arm64@2.5.0':
+ '@parcel/watcher-android-arm64@2.5.1':
optional: true
- '@parcel/watcher-darwin-arm64@2.5.0':
+ '@parcel/watcher-darwin-arm64@2.5.1':
optional: true
- '@parcel/watcher-darwin-x64@2.5.0':
+ '@parcel/watcher-darwin-x64@2.5.1':
optional: true
- '@parcel/watcher-freebsd-x64@2.5.0':
+ '@parcel/watcher-freebsd-x64@2.5.1':
optional: true
- '@parcel/watcher-linux-arm-glibc@2.5.0':
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
optional: true
- '@parcel/watcher-linux-arm-musl@2.5.0':
+ '@parcel/watcher-linux-arm-musl@2.5.1':
optional: true
- '@parcel/watcher-linux-arm64-glibc@2.5.0':
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
optional: true
- '@parcel/watcher-linux-arm64-musl@2.5.0':
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
optional: true
- '@parcel/watcher-linux-x64-glibc@2.5.0':
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
optional: true
- '@parcel/watcher-linux-x64-musl@2.5.0':
+ '@parcel/watcher-linux-x64-musl@2.5.1':
optional: true
- '@parcel/watcher-win32-arm64@2.5.0':
+ '@parcel/watcher-win32-arm64@2.5.1':
optional: true
- '@parcel/watcher-win32-ia32@2.5.0':
+ '@parcel/watcher-win32-ia32@2.5.1':
optional: true
- '@parcel/watcher-win32-x64@2.5.0':
+ '@parcel/watcher-win32-x64@2.5.1':
optional: true
- '@parcel/watcher@2.5.0':
+ '@parcel/watcher@2.5.1':
dependencies:
detect-libc: 1.0.3
is-glob: 4.0.3
micromatch: 4.0.8
node-addon-api: 7.1.1
optionalDependencies:
- '@parcel/watcher-android-arm64': 2.5.0
- '@parcel/watcher-darwin-arm64': 2.5.0
- '@parcel/watcher-darwin-x64': 2.5.0
- '@parcel/watcher-freebsd-x64': 2.5.0
- '@parcel/watcher-linux-arm-glibc': 2.5.0
- '@parcel/watcher-linux-arm-musl': 2.5.0
- '@parcel/watcher-linux-arm64-glibc': 2.5.0
- '@parcel/watcher-linux-arm64-musl': 2.5.0
- '@parcel/watcher-linux-x64-glibc': 2.5.0
- '@parcel/watcher-linux-x64-musl': 2.5.0
- '@parcel/watcher-win32-arm64': 2.5.0
- '@parcel/watcher-win32-ia32': 2.5.0
- '@parcel/watcher-win32-x64': 2.5.0
+ '@parcel/watcher-android-arm64': 2.5.1
+ '@parcel/watcher-darwin-arm64': 2.5.1
+ '@parcel/watcher-darwin-x64': 2.5.1
+ '@parcel/watcher-freebsd-x64': 2.5.1
+ '@parcel/watcher-linux-arm-glibc': 2.5.1
+ '@parcel/watcher-linux-arm-musl': 2.5.1
+ '@parcel/watcher-linux-arm64-glibc': 2.5.1
+ '@parcel/watcher-linux-arm64-musl': 2.5.1
+ '@parcel/watcher-linux-x64-glibc': 2.5.1
+ '@parcel/watcher-linux-x64-musl': 2.5.1
+ '@parcel/watcher-win32-arm64': 2.5.1
+ '@parcel/watcher-win32-ia32': 2.5.1
+ '@parcel/watcher-win32-x64': 2.5.1
optional: true
- '@peculiar/asn1-android@2.3.10':
+ '@peculiar/asn1-android@2.6.0':
dependencies:
- '@peculiar/asn1-schema': 2.3.8
- asn1js: 3.0.5
+ '@peculiar/asn1-schema': 2.6.0
+ asn1js: 3.0.6
tslib: 2.8.1
- '@peculiar/asn1-ecc@2.3.8':
+ '@peculiar/asn1-cms@2.6.0':
dependencies:
- '@peculiar/asn1-schema': 2.3.8
- '@peculiar/asn1-x509': 2.3.8
- asn1js: 3.0.5
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ '@peculiar/asn1-x509-attr': 2.6.0
+ asn1js: 3.0.6
tslib: 2.8.1
- '@peculiar/asn1-rsa@2.3.8':
+ '@peculiar/asn1-csr@2.6.0':
dependencies:
- '@peculiar/asn1-schema': 2.3.8
- '@peculiar/asn1-x509': 2.3.8
- asn1js: 3.0.5
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ asn1js: 3.0.6
tslib: 2.8.1
- '@peculiar/asn1-schema@2.3.8':
+ '@peculiar/asn1-ecc@2.6.0':
dependencies:
- asn1js: 3.0.5
- pvtsutils: 1.3.5
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ asn1js: 3.0.6
tslib: 2.8.1
- '@peculiar/asn1-x509@2.3.8':
+ '@peculiar/asn1-pfx@2.6.0':
dependencies:
- '@peculiar/asn1-schema': 2.3.8
- asn1js: 3.0.5
- ipaddr.js: 2.2.0
- pvtsutils: 1.3.5
+ '@peculiar/asn1-cms': 2.6.0
+ '@peculiar/asn1-pkcs8': 2.6.0
+ '@peculiar/asn1-rsa': 2.6.0
+ '@peculiar/asn1-schema': 2.6.0
+ asn1js: 3.0.6
tslib: 2.8.1
+ '@peculiar/asn1-pkcs8@2.6.0':
+ dependencies:
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ asn1js: 3.0.6
+ tslib: 2.8.1
+
+ '@peculiar/asn1-pkcs9@2.6.0':
+ dependencies:
+ '@peculiar/asn1-cms': 2.6.0
+ '@peculiar/asn1-pfx': 2.6.0
+ '@peculiar/asn1-pkcs8': 2.6.0
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ '@peculiar/asn1-x509-attr': 2.6.0
+ asn1js: 3.0.6
+ tslib: 2.8.1
+
+ '@peculiar/asn1-rsa@2.6.0':
+ dependencies:
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ asn1js: 3.0.6
+ tslib: 2.8.1
+
+ '@peculiar/asn1-schema@2.6.0':
+ dependencies:
+ asn1js: 3.0.6
+ pvtsutils: 1.3.6
+ tslib: 2.8.1
+
+ '@peculiar/asn1-x509-attr@2.6.0':
+ dependencies:
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ asn1js: 3.0.6
+ tslib: 2.8.1
+
+ '@peculiar/asn1-x509@2.6.0':
+ dependencies:
+ '@peculiar/asn1-schema': 2.6.0
+ asn1js: 3.0.6
+ pvtsutils: 1.3.6
+ tslib: 2.8.1
+
+ '@peculiar/x509@1.14.2':
+ dependencies:
+ '@peculiar/asn1-cms': 2.6.0
+ '@peculiar/asn1-csr': 2.6.0
+ '@peculiar/asn1-ecc': 2.6.0
+ '@peculiar/asn1-pkcs9': 2.6.0
+ '@peculiar/asn1-rsa': 2.6.0
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ pvtsutils: 1.3.6
+ reflect-metadata: 0.2.2
+ tslib: 2.8.1
+ tsyringe: 4.10.0
+
'@peertube/http-signature@1.7.0':
dependencies:
assert-plus: 1.0.0
jsprim: 1.4.2
sshpk: 1.18.0
+ '@pinojs/redact@0.4.0': {}
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -12845,7 +12952,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@readme/better-ajv-errors@2.3.2(ajv@8.17.1)':
+ '@readme/better-ajv-errors@2.4.0(ajv@8.17.1)':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/runtime': 7.28.4
@@ -12855,10 +12962,10 @@ snapshots:
leven: 3.1.0
picocolors: 1.1.1
- '@readme/openapi-parser@5.0.2(openapi-types@12.1.3)':
+ '@readme/openapi-parser@5.2.1(openapi-types@12.1.3)':
dependencies:
'@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
- '@readme/better-ajv-errors': 2.3.2(ajv@8.17.1)
+ '@readme/better-ajv-errors': 2.4.0(ajv@8.17.1)
'@readme/openapi-schemas': 3.1.0
'@types/json-schema': 7.0.15
ajv: 8.17.1
@@ -12867,121 +12974,121 @@ snapshots:
'@readme/openapi-schemas@3.1.0': {}
- '@redocly/ajv@8.11.2':
+ '@redocly/ajv@8.17.1':
dependencies:
fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
- uri-js-replace: 1.0.1
'@redocly/config@0.22.2': {}
- '@redocly/openapi-core@1.34.5(supports-color@10.2.0)':
+ '@redocly/openapi-core@1.34.5(supports-color@10.2.2)':
dependencies:
- '@redocly/ajv': 8.11.2
+ '@redocly/ajv': 8.17.1
'@redocly/config': 0.22.2
colorette: 1.4.0
- https-proxy-agent: 7.0.6(supports-color@10.2.0)
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
js-levenshtein: 1.1.6
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
minimatch: 5.1.6
pluralize: 8.0.0
yaml-ast-parser: 0.0.43
transitivePeerDependencies:
- supports-color
- '@rolldown/pluginutils@1.0.0-beta.29': {}
+ '@rolldown/pluginutils@1.0.0-beta.50': {}
- '@rollup/plugin-json@6.1.0(rollup@4.52.4)':
+ '@rollup/plugin-json@6.1.0(rollup@4.53.3)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.52.4)
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.3)
optionalDependencies:
- rollup: 4.52.4
+ rollup: 4.53.3
- '@rollup/plugin-replace@6.0.2(rollup@4.52.4)':
+ '@rollup/plugin-replace@6.0.3(rollup@4.53.3)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.52.4)
- magic-string: 0.30.19
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.3)
+ magic-string: 0.30.21
optionalDependencies:
- rollup: 4.52.4
+ rollup: 4.53.3
- '@rollup/pluginutils@5.3.0(rollup@4.52.4)':
+ '@rollup/pluginutils@5.3.0(rollup@4.53.3)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.52.4
+ rollup: 4.53.3
- '@rollup/rollup-android-arm-eabi@4.52.4':
+ '@rollup/rollup-android-arm-eabi@4.53.3':
optional: true
- '@rollup/rollup-android-arm64@4.52.4':
+ '@rollup/rollup-android-arm64@4.53.3':
optional: true
- '@rollup/rollup-darwin-arm64@4.52.4':
+ '@rollup/rollup-darwin-arm64@4.53.3':
optional: true
- '@rollup/rollup-darwin-x64@4.52.4':
+ '@rollup/rollup-darwin-x64@4.53.3':
optional: true
- '@rollup/rollup-freebsd-arm64@4.52.4':
+ '@rollup/rollup-freebsd-arm64@4.53.3':
optional: true
- '@rollup/rollup-freebsd-x64@4.52.4':
+ '@rollup/rollup-freebsd-x64@4.53.3':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.52.4':
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.52.4':
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.52.4':
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.52.4':
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.52.4':
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.52.4':
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.52.4':
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.52.4':
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.52.4':
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.52.4':
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-x64-musl@4.52.4':
+ '@rollup/rollup-linux-x64-musl@4.53.3':
optional: true
- '@rollup/rollup-openharmony-arm64@4.52.4':
+ '@rollup/rollup-openharmony-arm64@4.53.3':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.52.4':
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.52.4':
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.52.4':
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.52.4':
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
optional: true
'@rtsao/scc@1.1.0': {}
- '@rushstack/node-core-library@5.17.0(@types/node@22.18.10)':
+ '@rushstack/node-core-library@5.19.0(@types/node@24.10.1)':
dependencies:
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
@@ -12989,31 +13096,31 @@ snapshots:
fs-extra: 11.3.2
import-lazy: 4.0.0
jju: 1.4.0
- resolve: 1.22.10
+ resolve: 1.22.11
semver: 7.5.4
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@rushstack/problem-matcher@0.1.1(@types/node@22.18.10)':
+ '@rushstack/problem-matcher@0.1.1(@types/node@24.10.1)':
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@rushstack/rig-package@0.6.0':
dependencies:
- resolve: 1.22.10
+ resolve: 1.22.11
strip-json-comments: 3.1.1
- '@rushstack/terminal@0.19.1(@types/node@22.18.10)':
+ '@rushstack/terminal@0.19.4(@types/node@24.10.1)':
dependencies:
- '@rushstack/node-core-library': 5.17.0(@types/node@22.18.10)
- '@rushstack/problem-matcher': 0.1.1(@types/node@22.18.10)
+ '@rushstack/node-core-library': 5.19.0(@types/node@24.10.1)
+ '@rushstack/problem-matcher': 0.1.1(@types/node@24.10.1)
supports-color: 8.1.1
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@rushstack/ts-command-line@5.1.1(@types/node@22.18.10)':
+ '@rushstack/ts-command-line@5.1.4(@types/node@24.10.1)':
dependencies:
- '@rushstack/terminal': 0.19.1(@types/node@22.18.10)
+ '@rushstack/terminal': 0.19.4(@types/node@24.10.1)
'@types/argparse': 1.0.38
argparse: 1.0.10
string-argv: 0.3.2
@@ -13022,60 +13129,60 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
- '@sentry-internal/browser-utils@10.20.0':
+ '@sentry-internal/browser-utils@10.26.0':
dependencies:
- '@sentry/core': 10.20.0
+ '@sentry/core': 10.26.0
- '@sentry-internal/feedback@10.20.0':
+ '@sentry-internal/feedback@10.26.0':
dependencies:
- '@sentry/core': 10.20.0
+ '@sentry/core': 10.26.0
'@sentry-internal/node-cpu-profiler@2.2.0':
dependencies:
- detect-libc: 2.1.1
- node-abi: 3.77.0
+ detect-libc: 2.1.2
+ node-abi: 3.85.0
- '@sentry-internal/replay-canvas@10.20.0':
+ '@sentry-internal/replay-canvas@10.26.0':
dependencies:
- '@sentry-internal/replay': 10.20.0
- '@sentry/core': 10.20.0
+ '@sentry-internal/replay': 10.26.0
+ '@sentry/core': 10.26.0
- '@sentry-internal/replay@10.20.0':
+ '@sentry-internal/replay@10.26.0':
dependencies:
- '@sentry-internal/browser-utils': 10.20.0
- '@sentry/core': 10.20.0
+ '@sentry-internal/browser-utils': 10.26.0
+ '@sentry/core': 10.26.0
- '@sentry/browser@10.20.0':
+ '@sentry/browser@10.26.0':
dependencies:
- '@sentry-internal/browser-utils': 10.20.0
- '@sentry-internal/feedback': 10.20.0
- '@sentry-internal/replay': 10.20.0
- '@sentry-internal/replay-canvas': 10.20.0
- '@sentry/core': 10.20.0
+ '@sentry-internal/browser-utils': 10.26.0
+ '@sentry-internal/feedback': 10.26.0
+ '@sentry-internal/replay': 10.26.0
+ '@sentry-internal/replay-canvas': 10.26.0
+ '@sentry/core': 10.26.0
- '@sentry/core@10.20.0': {}
+ '@sentry/core@10.26.0': {}
- '@sentry/node-core@10.20.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)':
+ '@sentry/node-core@10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)':
dependencies:
'@apm-js-collab/tracing-hooks': 0.3.1
'@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
- '@sentry/core': 10.20.0
- '@sentry/opentelemetry': 10.20.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.38.0
+ '@sentry/core': 10.26.0
+ '@sentry/opentelemetry': 10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
import-in-the-middle: 1.15.0
transitivePeerDependencies:
- supports-color
- '@sentry/node@10.20.0':
+ '@sentry/node@10.26.0':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-amqplib': 0.51.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-connect': 0.48.0(@opentelemetry/api@1.9.0)
@@ -13099,68 +13206,68 @@ snapshots:
'@opentelemetry/instrumentation-redis': 0.53.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-tedious': 0.23.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-undici': 0.15.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.38.0
'@prisma/instrumentation': 6.15.0(@opentelemetry/api@1.9.0)
- '@sentry/core': 10.20.0
- '@sentry/node-core': 10.20.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
- '@sentry/opentelemetry': 10.20.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
+ '@sentry/core': 10.26.0
+ '@sentry/node-core': 10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
+ '@sentry/opentelemetry': 10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
import-in-the-middle: 1.15.0
minimatch: 9.0.5
transitivePeerDependencies:
- supports-color
- '@sentry/opentelemetry@10.20.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)':
+ '@sentry/opentelemetry@10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.37.0
- '@sentry/core': 10.20.0
+ '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.38.0
+ '@sentry/core': 10.26.0
- '@sentry/profiling-node@10.20.0':
+ '@sentry/profiling-node@10.26.0':
dependencies:
'@sentry-internal/node-cpu-profiler': 2.2.0
- '@sentry/core': 10.20.0
- '@sentry/node': 10.20.0
+ '@sentry/core': 10.26.0
+ '@sentry/node': 10.26.0
transitivePeerDependencies:
- supports-color
- '@sentry/vue@10.20.0(vue@3.5.22(typescript@5.9.3))':
+ '@sentry/vue@10.26.0(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@sentry/browser': 10.20.0
- '@sentry/core': 10.20.0
- vue: 3.5.22(typescript@5.9.3)
+ '@sentry/browser': 10.26.0
+ '@sentry/core': 10.26.0
+ vue: 3.5.24(typescript@5.9.3)
- '@shikijs/core@3.13.0':
+ '@shikijs/core@3.15.0':
dependencies:
- '@shikijs/types': 3.13.0
+ '@shikijs/types': 3.15.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@3.13.0':
+ '@shikijs/engine-javascript@3.15.0':
dependencies:
- '@shikijs/types': 3.13.0
+ '@shikijs/types': 3.15.0
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.3
- '@shikijs/engine-oniguruma@3.13.0':
+ '@shikijs/engine-oniguruma@3.15.0':
dependencies:
- '@shikijs/types': 3.13.0
+ '@shikijs/types': 3.15.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@3.13.0':
+ '@shikijs/langs@3.15.0':
dependencies:
- '@shikijs/types': 3.13.0
+ '@shikijs/types': 3.15.0
- '@shikijs/themes@3.13.0':
+ '@shikijs/themes@3.15.0':
dependencies:
- '@shikijs/types': 3.13.0
+ '@shikijs/types': 3.15.0
- '@shikijs/types@3.13.0':
+ '@shikijs/types@3.15.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -13175,19 +13282,16 @@ snapshots:
'@sideway/pinpoint@2.0.0': {}
- '@simplewebauthn/server@12.0.0(encoding@0.1.13)':
+ '@simplewebauthn/server@13.2.2':
dependencies:
- '@hexagon/base64': 1.1.27
- '@levischuck/tiny-cbor': 0.2.2
- '@peculiar/asn1-android': 2.3.10
- '@peculiar/asn1-ecc': 2.3.8
- '@peculiar/asn1-rsa': 2.3.8
- '@peculiar/asn1-schema': 2.3.8
- '@peculiar/asn1-x509': 2.3.8
- '@simplewebauthn/types': 12.0.0
- cross-fetch: 4.1.0(encoding@0.1.13)
- transitivePeerDependencies:
- - encoding
+ '@hexagon/base64': 1.1.28
+ '@levischuck/tiny-cbor': 0.2.11
+ '@peculiar/asn1-android': 2.6.0
+ '@peculiar/asn1-ecc': 2.6.0
+ '@peculiar/asn1-rsa': 2.6.0
+ '@peculiar/asn1-schema': 2.6.0
+ '@peculiar/asn1-x509': 2.6.0
+ '@peculiar/x509': 1.14.2
'@simplewebauthn/types@12.0.0': {}
@@ -13195,14 +13299,10 @@ snapshots:
'@sindresorhus/is@5.6.0': {}
- '@sindresorhus/is@7.0.1': {}
+ '@sindresorhus/is@7.1.1': {}
'@sindresorhus/merge-streams@4.0.0': {}
- '@sinonjs/commons@2.0.0':
- dependencies:
- type-detect: 4.0.8
-
'@sinonjs/commons@3.0.1':
dependencies:
type-detect: 4.0.8
@@ -13219,22 +13319,16 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
- '@sinonjs/samsam@8.0.0':
+ '@sinonjs/samsam@8.0.3':
dependencies:
- '@sinonjs/commons': 2.0.0
- lodash.get: 4.4.2
- type-detect: 4.0.8
+ '@sinonjs/commons': 3.0.1
+ type-detect: 4.1.0
'@sinonjs/text-encoding@0.7.3': {}
- '@smithy/abort-controller@2.2.0':
+ '@smithy/abort-controller@4.2.5':
dependencies:
- '@smithy/types': 2.12.0
- tslib: 2.8.1
-
- '@smithy/abort-controller@4.2.0':
- dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
'@smithy/chunked-blob-reader-native@4.2.1':
@@ -13246,99 +13340,100 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/config-resolver@4.3.0':
+ '@smithy/config-resolver@4.4.3':
dependencies:
- '@smithy/node-config-provider': 4.3.0
- '@smithy/types': 4.6.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
'@smithy/util-config-provider': 4.2.0
- '@smithy/util-middleware': 4.2.0
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
tslib: 2.8.1
- '@smithy/core@3.15.0':
+ '@smithy/core@3.18.5':
dependencies:
- '@smithy/middleware-serde': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-stream': 4.5.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-stream': 4.5.6
'@smithy/util-utf8': 4.2.0
'@smithy/uuid': 1.1.0
tslib: 2.8.1
- '@smithy/credential-provider-imds@4.2.0':
+ '@smithy/credential-provider-imds@4.2.5':
dependencies:
- '@smithy/node-config-provider': 4.3.0
- '@smithy/property-provider': 4.2.0
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
tslib: 2.8.1
- '@smithy/eventstream-codec@4.2.0':
+ '@smithy/eventstream-codec@4.2.5':
dependencies:
'@aws-crypto/crc32': 5.2.0
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
'@smithy/util-hex-encoding': 4.2.0
tslib: 2.8.1
- '@smithy/eventstream-serde-browser@4.2.0':
+ '@smithy/eventstream-serde-browser@4.2.5':
dependencies:
- '@smithy/eventstream-serde-universal': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/eventstream-serde-universal': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/eventstream-serde-config-resolver@4.3.0':
+ '@smithy/eventstream-serde-config-resolver@4.3.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/eventstream-serde-node@4.2.0':
+ '@smithy/eventstream-serde-node@4.2.5':
dependencies:
- '@smithy/eventstream-serde-universal': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/eventstream-serde-universal': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/eventstream-serde-universal@4.2.0':
+ '@smithy/eventstream-serde-universal@4.2.5':
dependencies:
- '@smithy/eventstream-codec': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/eventstream-codec': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/fetch-http-handler@5.3.1':
+ '@smithy/fetch-http-handler@5.3.6':
dependencies:
- '@smithy/protocol-http': 5.3.0
- '@smithy/querystring-builder': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/querystring-builder': 4.2.5
+ '@smithy/types': 4.9.0
'@smithy/util-base64': 4.3.0
tslib: 2.8.1
- '@smithy/hash-blob-browser@4.2.1':
+ '@smithy/hash-blob-browser@4.2.6':
dependencies:
'@smithy/chunked-blob-reader': 5.2.0
'@smithy/chunked-blob-reader-native': 4.2.1
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/hash-node@4.2.0':
+ '@smithy/hash-node@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
'@smithy/util-buffer-from': 4.2.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/hash-stream-node@4.2.0':
+ '@smithy/hash-stream-node@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/invalid-dependency@4.2.0':
+ '@smithy/invalid-dependency@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/is-array-buffer@2.0.0':
+ '@smithy/is-array-buffer@2.2.0':
dependencies:
tslib: 2.8.1
@@ -13346,149 +13441,126 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/md5-js@4.2.0':
+ '@smithy/md5-js@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/middleware-content-length@4.2.0':
+ '@smithy/middleware-content-length@4.2.5':
dependencies:
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/middleware-endpoint@4.3.1':
+ '@smithy/middleware-endpoint@4.3.12':
dependencies:
- '@smithy/core': 3.15.0
- '@smithy/middleware-serde': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
- '@smithy/url-parser': 4.2.0
- '@smithy/util-middleware': 4.2.0
+ '@smithy/core': 3.18.5
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-middleware': 4.2.5
tslib: 2.8.1
- '@smithy/middleware-retry@4.4.1':
+ '@smithy/middleware-retry@4.4.12':
dependencies:
- '@smithy/node-config-provider': 4.3.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/service-error-classification': 4.2.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
- '@smithy/util-middleware': 4.2.0
- '@smithy/util-retry': 4.2.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/service-error-classification': 4.2.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
'@smithy/uuid': 1.1.0
tslib: 2.8.1
- '@smithy/middleware-serde@4.2.0':
+ '@smithy/middleware-serde@4.2.6':
dependencies:
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/middleware-stack@4.2.0':
+ '@smithy/middleware-stack@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/node-config-provider@4.3.0':
+ '@smithy/node-config-provider@4.3.5':
dependencies:
- '@smithy/property-provider': 4.2.0
- '@smithy/shared-ini-file-loader': 4.3.0
- '@smithy/types': 4.6.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/node-http-handler@2.5.0':
+ '@smithy/node-http-handler@4.4.5':
dependencies:
- '@smithy/abort-controller': 2.2.0
- '@smithy/protocol-http': 3.3.0
- '@smithy/querystring-builder': 2.2.0
- '@smithy/types': 2.12.0
+ '@smithy/abort-controller': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/querystring-builder': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/node-http-handler@4.3.0':
+ '@smithy/property-provider@4.2.5':
dependencies:
- '@smithy/abort-controller': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/querystring-builder': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/property-provider@4.2.0':
+ '@smithy/protocol-http@5.3.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/protocol-http@3.3.0':
+ '@smithy/querystring-builder@4.2.5':
dependencies:
- '@smithy/types': 2.12.0
- tslib: 2.8.1
-
- '@smithy/protocol-http@5.3.0':
- dependencies:
- '@smithy/types': 4.6.0
- tslib: 2.8.1
-
- '@smithy/querystring-builder@2.2.0':
- dependencies:
- '@smithy/types': 2.12.0
- '@smithy/util-uri-escape': 2.2.0
- tslib: 2.8.1
-
- '@smithy/querystring-builder@4.2.0':
- dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
'@smithy/util-uri-escape': 4.2.0
tslib: 2.8.1
- '@smithy/querystring-parser@4.2.0':
+ '@smithy/querystring-parser@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/service-error-classification@4.2.0':
+ '@smithy/service-error-classification@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
- '@smithy/shared-ini-file-loader@4.3.0':
+ '@smithy/shared-ini-file-loader@4.4.0':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/signature-v4@5.3.0':
+ '@smithy/signature-v4@5.3.5':
dependencies:
'@smithy/is-array-buffer': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
'@smithy/util-hex-encoding': 4.2.0
- '@smithy/util-middleware': 4.2.0
+ '@smithy/util-middleware': 4.2.5
'@smithy/util-uri-escape': 4.2.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/smithy-client@4.7.1':
+ '@smithy/smithy-client@4.9.8':
dependencies:
- '@smithy/core': 3.15.0
- '@smithy/middleware-endpoint': 4.3.1
- '@smithy/middleware-stack': 4.2.0
- '@smithy/protocol-http': 5.3.0
- '@smithy/types': 4.6.0
- '@smithy/util-stream': 4.5.0
+ '@smithy/core': 3.18.5
+ '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-stream': 4.5.6
tslib: 2.8.1
- '@smithy/types@2.12.0':
+ '@smithy/types@4.9.0':
dependencies:
tslib: 2.8.1
- '@smithy/types@4.6.0':
+ '@smithy/url-parser@4.2.5':
dependencies:
- tslib: 2.8.1
-
- '@smithy/url-parser@4.2.0':
- dependencies:
- '@smithy/querystring-parser': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/querystring-parser': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
'@smithy/util-base64@4.3.0':
@@ -13505,9 +13577,9 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/util-buffer-from@2.0.0':
+ '@smithy/util-buffer-from@2.2.0':
dependencies:
- '@smithy/is-array-buffer': 2.0.0
+ '@smithy/is-array-buffer': 2.2.0
tslib: 2.8.1
'@smithy/util-buffer-from@4.2.0':
@@ -13519,66 +13591,62 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/util-defaults-mode-browser@4.3.0':
+ '@smithy/util-defaults-mode-browser@4.3.11':
dependencies:
- '@smithy/property-provider': 4.2.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/util-defaults-mode-node@4.2.1':
+ '@smithy/util-defaults-mode-node@4.2.14':
dependencies:
- '@smithy/config-resolver': 4.3.0
- '@smithy/credential-provider-imds': 4.2.0
- '@smithy/node-config-provider': 4.3.0
- '@smithy/property-provider': 4.2.0
- '@smithy/smithy-client': 4.7.1
- '@smithy/types': 4.6.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/smithy-client': 4.9.8
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/util-endpoints@3.2.0':
+ '@smithy/util-endpoints@3.2.5':
dependencies:
- '@smithy/node-config-provider': 4.3.0
- '@smithy/types': 4.6.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
'@smithy/util-hex-encoding@4.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/util-middleware@4.2.0':
+ '@smithy/util-middleware@4.2.5':
dependencies:
- '@smithy/types': 4.6.0
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/util-retry@4.2.0':
+ '@smithy/util-retry@4.2.5':
dependencies:
- '@smithy/service-error-classification': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/service-error-classification': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/util-stream@4.5.0':
+ '@smithy/util-stream@4.5.6':
dependencies:
- '@smithy/fetch-http-handler': 5.3.1
- '@smithy/node-http-handler': 4.3.0
- '@smithy/types': 4.6.0
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/types': 4.9.0
'@smithy/util-base64': 4.3.0
'@smithy/util-buffer-from': 4.2.0
'@smithy/util-hex-encoding': 4.2.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/util-uri-escape@2.2.0':
- dependencies:
- tslib: 2.8.1
-
'@smithy/util-uri-escape@4.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/util-utf8@2.0.0':
+ '@smithy/util-utf8@2.3.0':
dependencies:
- '@smithy/util-buffer-from': 2.0.0
+ '@smithy/util-buffer-from': 2.2.0
tslib: 2.8.1
'@smithy/util-utf8@4.2.0':
@@ -13586,10 +13654,10 @@ snapshots:
'@smithy/util-buffer-from': 4.2.0
tslib: 2.8.1
- '@smithy/util-waiter@4.2.0':
+ '@smithy/util-waiter@4.2.5':
dependencies:
- '@smithy/abort-controller': 4.2.0
- '@smithy/types': 4.6.0
+ '@smithy/abort-controller': 4.2.5
+ '@smithy/types': 4.9.0
tslib: 2.8.1
'@smithy/uuid@1.1.0':
@@ -13600,302 +13668,310 @@ snapshots:
'@standard-schema/spec@1.0.0': {}
- '@storybook/addon-actions@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-actions@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
'@types/uuid': 9.0.8
dequal: 2.0.3
- polished: 4.2.2
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ polished: 4.3.1
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
uuid: 9.0.1
- '@storybook/addon-backgrounds@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-backgrounds@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
memoizerific: 1.11.3
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
- '@storybook/addon-controls@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-controls@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
dequal: 2.0.3
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
- '@storybook/addon-docs@8.6.14(@types/react@18.0.28)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-docs@8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- '@mdx-js/react': 3.0.1(@types/react@18.0.28)(react@19.2.0)
- '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/csf-plugin': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/csf-plugin': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- '@storybook/addon-essentials@8.6.14(@types/react@18.0.28)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-essentials@8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- '@storybook/addon-actions': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-backgrounds': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-controls': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-docs': 8.6.14(@types/react@18.0.28)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-highlight': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-measure': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-outline': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-toolbars': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/addon-viewport': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@storybook/addon-actions': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-backgrounds': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-controls': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-docs': 8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-highlight': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-measure': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-outline': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-toolbars': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/addon-viewport': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- '@storybook/addon-highlight@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-highlight@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/addon-interactions@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-interactions@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/instrumenter': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/test': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- polished: 4.2.2
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@storybook/instrumenter': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/test': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ polished: 4.3.1
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
- '@storybook/addon-links@9.1.10(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-links@10.0.8(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
optionalDependencies:
react: 19.2.0
- '@storybook/addon-mdx-gfm@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-mdx-gfm@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- remark-gfm: 4.0.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ remark-gfm: 4.0.1
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
transitivePeerDependencies:
- supports-color
- '@storybook/addon-measure@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-measure@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
tiny-invariant: 1.3.3
- '@storybook/addon-outline@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-outline@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
- '@storybook/addon-storysource@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-storysource@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- '@storybook/source-loader': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ '@storybook/source-loader': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
estraverse: 5.3.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
tiny-invariant: 1.3.3
- '@storybook/addon-toolbars@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-toolbars@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/addon-viewport@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/addon-viewport@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
memoizerific: 1.11.3
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/blocks@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/blocks@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- '@storybook/icons': 1.2.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
optionalDependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- '@storybook/builder-vite@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))':
+ '@storybook/builder-vite@10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
dependencies:
- '@storybook/csf-plugin': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@storybook/csf-plugin': 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
ts-dedent: 2.2.0
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ transitivePeerDependencies:
+ - esbuild
+ - rollup
+ - webpack
- '@storybook/components@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/components@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/core-events@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/core-events@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/csf-plugin@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/csf-plugin@10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
- unplugin: 1.16.1
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ unplugin: 2.3.10
+ optionalDependencies:
+ esbuild: 0.27.0
+ rollup: 4.53.3
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
- '@storybook/csf-plugin@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/csf-plugin@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
unplugin: 1.16.1
'@storybook/global@5.0.0': {}
- '@storybook/icons@1.2.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ '@storybook/icons@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- '@storybook/instrumenter@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/instrumenter@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- '@vitest/utils': 2.1.1
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@vitest/utils': 2.1.9
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/manager-api@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/manager-api@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/preview-api@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/preview-api@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/react-dom-shim@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/react-dom-shim@10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/react-dom-shim@9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/react-dom-shim@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/react-vite@9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.4)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))':
+ '@storybook/react-vite@10.0.8(esbuild@0.27.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
dependencies:
- '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
- '@rollup/pluginutils': 5.3.0(rollup@4.52.4)
- '@storybook/builder-vite': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
- '@storybook/react': 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(typescript@5.9.3)
- find-up: 7.0.0
- magic-string: 0.30.19
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.3)
+ '@storybook/builder-vite': 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@storybook/react': 10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)
+ empathic: 2.0.0
+ magic-string: 0.30.21
react: 19.2.0
- react-docgen: 8.0.1
+ react-docgen: 8.0.2
react-dom: 19.2.0(react@19.2.0)
- resolve: 1.22.10
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ resolve: 1.22.11
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
tsconfig-paths: 4.2.0
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
transitivePeerDependencies:
+ - esbuild
- rollup
- supports-color
- typescript
+ - webpack
- '@storybook/react@9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(typescript@5.9.3)':
+ '@storybook/react@10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/react-dom-shim': 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ '@storybook/react-dom-shim': 10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
optionalDependencies:
typescript: 5.9.3
- '@storybook/source-loader@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/source-loader@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- es-toolkit: 1.27.0
+ es-toolkit: 1.42.0
estraverse: 5.3.0
prettier: 3.6.2
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/test@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/test@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/instrumenter': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ '@storybook/instrumenter': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
'@testing-library/dom': 10.4.0
'@testing-library/jest-dom': 6.5.0
'@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0)
'@vitest/expect': 2.0.5
'@vitest/spy': 2.0.5
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/theming@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/theming@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/types@8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))':
+ '@storybook/types@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
dependencies:
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/vue3-vite@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))(vue@3.5.22(typescript@5.9.3))':
+ '@storybook/vue3-vite@10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@storybook/builder-vite': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
- '@storybook/vue3': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vue@3.5.22(typescript@5.9.3))
- find-package-json: 1.2.0
- magic-string: 0.30.19
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@storybook/builder-vite': 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@storybook/vue3': 10.0.8(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vue@3.5.24(typescript@5.9.3))
+ magic-string: 0.30.21
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
typescript: 5.9.3
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
vue-component-meta: 2.2.12(typescript@5.9.3)
- vue-docgen-api: 4.79.2(vue@3.5.22(typescript@5.9.3))
+ vue-docgen-api: 4.79.2(vue@3.5.24(typescript@5.9.3))
transitivePeerDependencies:
+ - esbuild
+ - rollup
- vue
+ - webpack
- '@storybook/vue3@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))(vue@3.5.22(typescript@5.9.3))':
+ '@storybook/vue3@10.0.8(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
type-fest: 2.19.0
- vue: 3.5.22(typescript@5.9.3)
- vue-component-type-helpers: 3.1.1
+ vue: 3.5.24(typescript@5.9.3)
+ vue-component-type-helpers: 3.1.5
- '@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3)':
+ '@stylistic/eslint-plugin@5.5.0(eslint@9.39.1)':
dependencies:
- '@typescript-eslint/utils': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- eslint: 9.37.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@typescript-eslint/types': 8.47.0
+ eslint: 9.39.1
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
picomatch: 4.0.3
- transitivePeerDependencies:
- - supports-color
- - typescript
- '@swc/cli@0.7.8(@swc/core@1.13.5)(chokidar@4.0.3)':
+ '@swc/cli@0.7.9(@swc/core@1.15.3)(chokidar@4.0.3)':
dependencies:
- '@swc/core': 1.13.5
+ '@swc/core': 1.15.3
'@swc/counter': 0.1.3
- '@xhmikosr/bin-wrapper': 13.0.5
+ '@xhmikosr/bin-wrapper': 13.2.0
commander: 8.3.0
minimatch: 9.0.5
- piscina: 4.4.0
+ piscina: 4.9.2
semver: 7.7.3
slash: 3.0.0
- source-map: 0.7.4
+ source-map: 0.7.6
tinyglobby: 0.2.15
optionalDependencies:
chokidar: 4.0.3
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
'@swc/core-android-arm64@1.3.11':
dependencies:
'@swc/wasm': 1.2.130
optional: true
- '@swc/core-darwin-arm64@1.13.20':
+ '@swc/core-darwin-arm64@1.15.3':
optional: true
- '@swc/core-darwin-arm64@1.13.5':
- optional: true
-
- '@swc/core-darwin-x64@1.13.20':
- optional: true
-
- '@swc/core-darwin-x64@1.13.5':
+ '@swc/core-darwin-x64@1.15.3':
optional: true
'@swc/core-freebsd-x64@1.3.11':
@@ -13903,73 +13979,49 @@ snapshots:
'@swc/wasm': 1.2.130
optional: true
- '@swc/core-linux-arm-gnueabihf@1.13.20':
+ '@swc/core-linux-arm-gnueabihf@1.15.3':
optional: true
- '@swc/core-linux-arm-gnueabihf@1.13.5':
+ '@swc/core-linux-arm64-gnu@1.15.3':
optional: true
- '@swc/core-linux-arm64-gnu@1.13.20':
+ '@swc/core-linux-arm64-musl@1.15.3':
optional: true
- '@swc/core-linux-arm64-gnu@1.13.5':
+ '@swc/core-linux-x64-gnu@1.15.3':
optional: true
- '@swc/core-linux-arm64-musl@1.13.20':
+ '@swc/core-linux-x64-musl@1.15.3':
optional: true
- '@swc/core-linux-arm64-musl@1.13.5':
+ '@swc/core-win32-arm64-msvc@1.15.3':
optional: true
- '@swc/core-linux-x64-gnu@1.13.20':
+ '@swc/core-win32-ia32-msvc@1.15.3':
optional: true
- '@swc/core-linux-x64-gnu@1.13.5':
+ '@swc/core-win32-x64-msvc@1.15.3':
optional: true
- '@swc/core-linux-x64-musl@1.13.20':
- optional: true
-
- '@swc/core-linux-x64-musl@1.13.5':
- optional: true
-
- '@swc/core-win32-arm64-msvc@1.13.20':
- optional: true
-
- '@swc/core-win32-arm64-msvc@1.13.5':
- optional: true
-
- '@swc/core-win32-ia32-msvc@1.13.20':
- optional: true
-
- '@swc/core-win32-ia32-msvc@1.13.5':
- optional: true
-
- '@swc/core-win32-x64-msvc@1.13.20':
- optional: true
-
- '@swc/core-win32-x64-msvc@1.13.5':
- optional: true
-
- '@swc/core@1.13.5':
+ '@swc/core@1.15.3':
dependencies:
'@swc/counter': 0.1.3
- '@swc/types': 0.1.24
+ '@swc/types': 0.1.25
optionalDependencies:
- '@swc/core-darwin-arm64': 1.13.5
- '@swc/core-darwin-x64': 1.13.5
- '@swc/core-linux-arm-gnueabihf': 1.13.5
- '@swc/core-linux-arm64-gnu': 1.13.5
- '@swc/core-linux-arm64-musl': 1.13.5
- '@swc/core-linux-x64-gnu': 1.13.5
- '@swc/core-linux-x64-musl': 1.13.5
- '@swc/core-win32-arm64-msvc': 1.13.5
- '@swc/core-win32-ia32-msvc': 1.13.5
- '@swc/core-win32-x64-msvc': 1.13.5
+ '@swc/core-darwin-arm64': 1.15.3
+ '@swc/core-darwin-x64': 1.15.3
+ '@swc/core-linux-arm-gnueabihf': 1.15.3
+ '@swc/core-linux-arm64-gnu': 1.15.3
+ '@swc/core-linux-arm64-musl': 1.15.3
+ '@swc/core-linux-x64-gnu': 1.15.3
+ '@swc/core-linux-x64-musl': 1.15.3
+ '@swc/core-win32-arm64-msvc': 1.15.3
+ '@swc/core-win32-ia32-msvc': 1.15.3
+ '@swc/core-win32-x64-msvc': 1.15.3
'@swc/counter@0.1.3': {}
- '@swc/types@0.1.24':
+ '@swc/types@0.1.25':
dependencies:
'@swc/counter': 0.1.3
@@ -13982,7 +14034,7 @@ snapshots:
stringz: 2.1.0
uuid: 9.0.1
- '@syuilo/aiscript@1.1.2':
+ '@syuilo/aiscript@1.2.0':
dependencies:
seedrandom: 3.0.5
stringz: 2.1.0
@@ -14020,7 +14072,7 @@ snapshots:
'@tensorflow/tfjs-core@4.22.0(encoding@0.1.13)':
dependencies:
'@types/long': 4.0.2
- '@types/offscreencanvas': 2019.7.0
+ '@types/offscreencanvas': 2019.7.3
'@types/seedrandom': 2.4.34
'@webgpu/types': 0.1.38
long: 4.0.0
@@ -14032,7 +14084,7 @@ snapshots:
'@tensorflow/tfjs-data@4.22.0(@tensorflow/tfjs-core@4.22.0(encoding@0.1.13))(encoding@0.1.13)(seedrandom@3.0.5)':
dependencies:
'@tensorflow/tfjs-core': 4.22.0(encoding@0.1.13)
- '@types/node-fetch': 2.6.11
+ '@types/node-fetch': 2.6.13
node-fetch: 2.6.13(encoding@0.1.13)
seedrandom: 3.0.5
string_decoder: 1.3.0
@@ -14047,8 +14099,8 @@ snapshots:
dependencies:
'@mapbox/node-pre-gyp': 1.0.9(encoding@0.1.13)
'@tensorflow/tfjs': 4.22.0(encoding@0.1.13)(seedrandom@3.0.5)
- adm-zip: 0.5.10
- google-protobuf: 3.21.2
+ adm-zip: 0.5.16
+ google-protobuf: 3.21.4
https-proxy-agent: 2.2.4
progress: 2.0.3
rimraf: 2.7.1
@@ -14080,7 +14132,7 @@ snapshots:
dependencies:
'@babel/code-frame': 7.27.1
'@babel/runtime': 7.28.4
- '@types/aria-query': 5.0.1
+ '@types/aria-query': 5.0.4
aria-query: 5.3.0
chalk: 4.1.2
dom-accessibility-api: 0.5.16
@@ -14091,7 +14143,7 @@ snapshots:
dependencies:
'@babel/code-frame': 7.27.1
'@babel/runtime': 7.28.4
- '@types/aria-query': 5.0.1
+ '@types/aria-query': 5.0.4
aria-query: 5.1.3
chalk: 4.1.2
dom-accessibility-api: 0.5.16
@@ -14125,88 +14177,100 @@ snapshots:
dependencies:
'@testing-library/dom': 10.4.0
- '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.22)(@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))':
+ '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@babel/runtime': 7.28.4
'@testing-library/dom': 9.3.4
- '@vue/test-utils': 2.4.1(@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))
- vue: 3.5.22(typescript@5.9.3)
+ '@vue/test-utils': 2.4.6
+ vue: 3.5.24(typescript@5.9.3)
optionalDependencies:
- '@vue/compiler-sfc': 3.5.22
- transitivePeerDependencies:
- - '@vue/server-renderer'
+ '@vue/compiler-sfc': 3.5.24
'@tokenizer/inflate@0.2.7':
dependencies:
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
fflate: 0.8.2
- token-types: 6.0.0
+ token-types: 6.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tokenizer/inflate@0.3.1':
+ dependencies:
+ debug: 4.4.3(supports-color@10.2.2)
+ fflate: 0.8.2
+ token-types: 6.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tokenizer/inflate@0.4.1':
+ dependencies:
+ debug: 4.4.3(supports-color@10.2.2)
+ token-types: 6.1.1
transitivePeerDependencies:
- supports-color
'@tokenizer/token@0.3.0': {}
- '@tsd/typescript@5.9.2': {}
+ '@tsd/typescript@5.9.3': {}
'@twemoji/parser@16.0.0': {}
'@types/accepts@1.3.7':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@types/archiver@6.0.3':
+ '@types/archiver@7.0.0':
dependencies:
- '@types/readdir-glob': 1.1.1
+ '@types/readdir-glob': 1.1.5
'@types/argparse@1.0.38': {}
- '@types/aria-query@5.0.1': {}
+ '@types/aria-query@5.0.4': {}
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.28.0
'@types/babel__generator@7.27.0':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
'@types/babel__traverse@7.28.0':
dependencies:
- '@babel/types': 7.28.4
-
- '@types/bcryptjs@2.4.6': {}
+ '@babel/types': 7.28.5
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@types/braces@3.0.1': {}
+ '@types/braces@3.0.5': {}
'@types/canvas-confetti@1.9.0': {}
- '@types/chai@5.2.2':
+ '@types/chai@5.2.3':
dependencies:
'@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
'@types/color-convert@2.0.4':
dependencies:
- '@types/color-name': 1.1.1
+ '@types/color-name': 1.1.5
- '@types/color-name@1.1.1': {}
+ '@types/color-name@1.1.5': {}
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/content-disposition@0.5.9': {}
@@ -14214,11 +14278,11 @@ snapshots:
'@types/debug@4.1.12':
dependencies:
- '@types/ms': 0.7.34
+ '@types/ms': 2.1.0
'@types/deep-eql@4.0.2': {}
- '@types/disposable-email-domains@1.0.2': {}
+ '@types/disposable-email-domains@1.0.6': {}
'@types/dlv@1.1.5': {}
@@ -14237,55 +14301,49 @@ snapshots:
'@types/estree@1.0.8': {}
- '@types/express-serve-static-core@4.17.33':
+ '@types/express-serve-static-core@5.1.0':
dependencies:
- '@types/node': 22.18.10
- '@types/qs': 6.9.7
- '@types/range-parser': 1.2.4
+ '@types/node': 24.10.1
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 1.2.1
- '@types/express@4.17.17':
+ '@types/express@5.0.4':
dependencies:
'@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 4.17.33
- '@types/qs': 6.9.7
- '@types/serve-static': 1.15.1
+ '@types/express-serve-static-core': 5.1.0
+ '@types/serve-static': 1.15.10
- '@types/fluent-ffmpeg@2.1.27':
+ '@types/fluent-ffmpeg@2.1.28':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/hammerjs@2.0.46': {}
'@types/hast@3.0.4':
dependencies:
- '@types/unist': 3.0.2
-
- '@types/htmlescape@1.1.3': {}
+ '@types/unist': 3.0.3
'@types/http-cache-semantics@4.0.4': {}
+ '@types/http-errors@2.0.5': {}
+
'@types/http-link-header@1.0.7':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/istanbul-lib-coverage@2.0.6': {}
- '@types/istanbul-lib-report@3.0.0':
+ '@types/istanbul-lib-report@3.0.3':
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports@3.0.4':
dependencies:
- '@types/istanbul-lib-report': 3.0.0
+ '@types/istanbul-lib-report': 3.0.3
'@types/js-yaml@4.0.9': {}
- '@types/jsdom@21.1.7':
- dependencies:
- '@types/node': 22.18.10
- '@types/tough-cookie': 4.0.5
- parse5: 7.3.0
-
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {}
@@ -14298,51 +14356,51 @@ snapshots:
'@types/matter-js@0.20.2': {}
- '@types/mdast@4.0.3':
+ '@types/mdast@4.0.4':
dependencies:
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
- '@types/mdx@2.0.3': {}
+ '@types/mdx@2.0.13': {}
'@types/methods@1.1.4': {}
- '@types/micromatch@4.0.9':
+ '@types/micromatch@4.0.10':
dependencies:
- '@types/braces': 3.0.1
+ '@types/braces': 3.0.5
- '@types/mime-types@2.1.4': {}
+ '@types/mime-types@3.0.1': {}
- '@types/mime@3.0.1': {}
+ '@types/mime@1.3.5': {}
- '@types/minimist@1.2.2': {}
+ '@types/minimist@1.2.5': {}
- '@types/ms@0.7.34': {}
+ '@types/ms@2.1.0': {}
'@types/mysql@2.15.27':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@types/node-fetch@2.6.11':
+ '@types/node-fetch@2.6.13':
dependencies:
- '@types/node': 22.18.10
- form-data: 4.0.4
+ '@types/node': 24.10.1
+ form-data: 4.0.5
- '@types/node@20.19.19':
+ '@types/node@20.19.25':
dependencies:
undici-types: 6.21.0
- '@types/node@22.18.10':
+ '@types/node@24.10.1':
dependencies:
- undici-types: 6.21.0
+ undici-types: 7.16.0
- '@types/nodemailer@6.4.20':
+ '@types/nodemailer@7.0.4':
dependencies:
- '@aws-sdk/client-ses': 3.873.0
- '@types/node': 22.18.10
+ '@aws-sdk/client-sesv2': 3.938.0
+ '@types/node': 24.10.1
transitivePeerDependencies:
- aws-crt
- '@types/normalize-package-data@2.4.1': {}
+ '@types/normalize-package-data@2.4.4': {}
'@types/oauth2orize-pkce@0.1.2':
dependencies:
@@ -14350,54 +14408,54 @@ snapshots:
'@types/oauth2orize@1.11.5':
dependencies:
- '@types/express': 4.17.17
- '@types/node': 22.18.10
+ '@types/express': 5.0.4
+ '@types/node': 24.10.1
'@types/oauth@0.9.6':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/offscreencanvas@2019.3.0': {}
- '@types/offscreencanvas@2019.7.0': {}
+ '@types/offscreencanvas@2019.7.3': {}
'@types/pg-pool@2.0.6':
dependencies:
- '@types/pg': 8.15.5
+ '@types/pg': 8.15.6
'@types/pg@8.15.5':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
pg-protocol: 1.10.3
pg-types: 2.2.0
- '@types/prop-types@15.7.15': {}
-
- '@types/pug@2.0.10': {}
+ '@types/pg@8.15.6':
+ dependencies:
+ '@types/node': 24.10.1
+ pg-protocol: 1.10.3
+ pg-types: 2.2.0
'@types/punycode@2.1.4': {}
- '@types/qrcode@1.5.5':
+ '@types/qrcode@1.5.6':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@types/qs@6.9.7': {}
+ '@types/qs@6.14.0': {}
'@types/random-seed@0.3.5': {}
- '@types/range-parser@1.2.4': {}
+ '@types/range-parser@1.2.7': {}
'@types/ratelimiter@3.4.6': {}
- '@types/react@18.0.28':
+ '@types/react@19.2.2':
dependencies:
- '@types/prop-types': 15.7.15
- '@types/scheduler': 0.26.0
- csstype: 3.1.3
+ csstype: 3.2.3
- '@types/readdir-glob@1.1.1':
+ '@types/readdir-glob@1.1.5':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/redis-info@3.0.3': {}
@@ -14407,9 +14465,7 @@ snapshots:
'@types/sanitize-html@2.16.0':
dependencies:
- htmlparser2: 8.0.1
-
- '@types/scheduler@0.26.0': {}
+ htmlparser2: 8.0.2
'@types/seedrandom@2.4.34': {}
@@ -14417,10 +14473,20 @@ snapshots:
'@types/semver@7.7.1': {}
- '@types/serve-static@1.15.1':
+ '@types/send@0.17.6':
dependencies:
- '@types/mime': 3.0.1
- '@types/node': 22.18.10
+ '@types/mime': 1.3.5
+ '@types/node': 24.10.1
+
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 24.10.1
+
+ '@types/serve-static@1.15.10':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 24.10.1
+ '@types/send': 0.17.6
'@types/serviceworker@0.0.74': {}
@@ -14428,14 +14494,14 @@ snapshots:
'@types/simple-oauth2@5.0.7': {}
- '@types/sinon@17.0.3':
+ '@types/sinon@17.0.4':
dependencies:
- '@types/sinonjs__fake-timers': 8.1.5
+ '@types/sinonjs__fake-timers': 15.0.1
+
+ '@types/sinonjs__fake-timers@15.0.1': {}
'@types/sinonjs__fake-timers@8.1.1': {}
- '@types/sinonjs__fake-timers@8.1.5': {}
-
'@types/sizzle@2.3.10': {}
'@types/statuses@2.0.6': {}
@@ -14444,8 +14510,8 @@ snapshots:
dependencies:
'@types/cookiejar': 2.1.5
'@types/methods': 1.1.4
- '@types/node': 22.18.10
- form-data: 4.0.4
+ '@types/node': 24.10.1
+ form-data: 4.0.5
'@types/supertest@6.0.3':
dependencies:
@@ -14454,7 +14520,7 @@ snapshots:
'@types/tedious@4.0.14':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/throttle-debounce@5.0.2': {}
@@ -14462,50 +14528,48 @@ snapshots:
'@types/tmp@0.2.6': {}
- '@types/tough-cookie@4.0.5': {}
-
- '@types/unist@3.0.2': {}
+ '@types/unist@3.0.3': {}
'@types/uuid@9.0.8': {}
'@types/vary@1.1.3':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/wawoff2@1.0.2':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/web-push@3.6.4':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
'@types/whatwg-mimetype@3.0.2': {}
'@types/ws@8.18.1':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
- '@types/yargs-parser@21.0.0': {}
+ '@types/yargs-parser@21.0.3': {}
- '@types/yargs@17.0.33':
+ '@types/yargs@17.0.34':
dependencies:
- '@types/yargs-parser': 21.0.0
+ '@types/yargs-parser': 21.0.3
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
optional: true
- '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.46.1
- '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.46.1
- eslint: 9.37.0
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.47.0
+ '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.47.0
+ eslint: 9.39.1
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -14514,57 +14578,57 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.46.1
- '@typescript-eslint/types': 8.46.1
- '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.46.1
- debug: 4.4.3(supports-color@10.2.0)
- eslint: 9.37.0
+ '@typescript-eslint/scope-manager': 8.47.0
+ '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.47.0
+ debug: 4.4.3(supports-color@10.2.2)
+ eslint: 9.39.1
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.47.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.46.1
- debug: 4.4.3(supports-color@10.2.0)
+ '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.47.0
+ debug: 4.4.3(supports-color@10.2.2)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.46.1':
+ '@typescript-eslint/scope-manager@8.47.0':
dependencies:
- '@typescript-eslint/types': 8.46.1
- '@typescript-eslint/visitor-keys': 8.46.1
+ '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/visitor-keys': 8.47.0
- '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.46.1(eslint@9.37.0)(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.46.1
- '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- debug: 4.4.3(supports-color@10.2.0)
- eslint: 9.37.0
+ '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ debug: 4.4.3(supports-color@10.2.2)
+ eslint: 9.39.1
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.46.1': {}
+ '@typescript-eslint/types@8.47.0': {}
- '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.47.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.46.1
- '@typescript-eslint/visitor-keys': 8.46.1
- debug: 4.4.3(supports-color@10.2.0)
+ '@typescript-eslint/project-service': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/visitor-keys': 8.47.0
+ debug: 4.4.3(supports-color@10.2.2)
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
@@ -14574,46 +14638,44 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.46.1(eslint@9.37.0)(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.47.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0)
- '@typescript-eslint/scope-manager': 8.46.1
- '@typescript-eslint/types': 8.46.1
- '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3)
- eslint: 9.37.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@typescript-eslint/scope-manager': 8.47.0
+ '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
+ eslint: 9.39.1
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.46.1':
+ '@typescript-eslint/visitor-keys@8.47.0':
dependencies:
- '@typescript-eslint/types': 8.46.1
+ '@typescript-eslint/types': 8.47.0
eslint-visitor-keys: 4.2.1
- '@ungap/structured-clone@1.2.0': {}
+ '@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-vue@6.0.1(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))(vue@3.5.22(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@rolldown/pluginutils': 1.0.0-beta.29
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
- vue: 3.5.22(typescript@5.9.3)
+ '@rolldown/pluginutils': 1.0.0-beta.50
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vue: 3.5.24(typescript@5.9.3)
- '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))':
+ '@vitest/coverage-v8@4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
dependencies:
- '@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 1.0.2
- ast-v8-to-istanbul: 0.3.3
- debug: 4.4.3(supports-color@10.2.0)
+ '@vitest/utils': 4.0.13
+ ast-v8-to-istanbul: 0.3.8
+ debug: 4.4.3(supports-color@10.2.2)
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
- istanbul-reports: 3.1.7
- magic-string: 0.30.19
- magicast: 0.3.5
- std-env: 3.9.0
- test-exclude: 7.0.1
- tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ istanbul-reports: 3.2.0
+ magicast: 0.5.1
+ std-env: 3.10.0
+ tinyrainbow: 3.0.3
+ vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
transitivePeerDependencies:
- supports-color
@@ -14626,26 +14688,44 @@ snapshots:
'@vitest/expect@3.2.4':
dependencies:
- '@types/chai': 5.2.2
+ '@types/chai': 5.2.3
'@vitest/spy': 3.2.4
'@vitest/utils': 3.2.4
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))':
+ '@vitest/expect@4.0.13':
+ dependencies:
+ '@standard-schema/spec': 1.0.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.0.13
+ '@vitest/utils': 4.0.13
+ chai: 6.2.1
+ tinyrainbow: 3.0.3
+
+ '@vitest/mocker@3.2.4(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
- magic-string: 0.30.19
+ magic-string: 0.30.21
optionalDependencies:
- msw: 2.11.5(@types/node@22.18.10)(typescript@5.9.3)
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+
+ '@vitest/mocker@4.0.13(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ dependencies:
+ '@vitest/spy': 4.0.13
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
'@vitest/pretty-format@2.0.5':
dependencies:
tinyrainbow: 1.2.0
- '@vitest/pretty-format@2.1.1':
+ '@vitest/pretty-format@2.1.9':
dependencies:
tinyrainbow: 1.2.0
@@ -14653,16 +14733,19 @@ snapshots:
dependencies:
tinyrainbow: 2.0.0
- '@vitest/runner@3.2.4':
+ '@vitest/pretty-format@4.0.13':
dependencies:
- '@vitest/utils': 3.2.4
- pathe: 2.0.3
- strip-literal: 3.0.0
+ tinyrainbow: 3.0.3
- '@vitest/snapshot@3.2.4':
+ '@vitest/runner@4.0.13':
dependencies:
- '@vitest/pretty-format': 3.2.4
- magic-string: 0.30.19
+ '@vitest/utils': 4.0.13
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.0.13':
+ dependencies:
+ '@vitest/pretty-format': 4.0.13
+ magic-string: 0.30.21
pathe: 2.0.3
'@vitest/spy@2.0.5':
@@ -14673,6 +14756,8 @@ snapshots:
dependencies:
tinyspy: 4.0.4
+ '@vitest/spy@4.0.13': {}
+
'@vitest/utils@2.0.5':
dependencies:
'@vitest/pretty-format': 2.0.5
@@ -14680,9 +14765,9 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 1.2.0
- '@vitest/utils@2.1.1':
+ '@vitest/utils@2.1.9':
dependencies:
- '@vitest/pretty-format': 2.1.1
+ '@vitest/pretty-format': 2.1.9
loupe: 3.2.1
tinyrainbow: 1.2.0
@@ -14692,6 +14777,11 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 2.0.0
+ '@vitest/utils@4.0.13':
+ dependencies:
+ '@vitest/pretty-format': 4.0.13
+ tinyrainbow: 3.0.3
+
'@volar/language-core@2.4.15':
dependencies:
'@volar/source-map': 2.4.15
@@ -14716,35 +14806,35 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue/compiler-core@3.5.22':
+ '@vue/compiler-core@3.5.24':
dependencies:
- '@babel/parser': 7.28.4
- '@vue/shared': 3.5.22
+ '@babel/parser': 7.28.5
+ '@vue/shared': 3.5.24
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.22':
+ '@vue/compiler-dom@3.5.24':
dependencies:
- '@vue/compiler-core': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-core': 3.5.24
+ '@vue/shared': 3.5.24
- '@vue/compiler-sfc@3.5.22':
+ '@vue/compiler-sfc@3.5.24':
dependencies:
- '@babel/parser': 7.28.4
- '@vue/compiler-core': 3.5.22
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
+ '@babel/parser': 7.28.5
+ '@vue/compiler-core': 3.5.24
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-ssr': 3.5.24
+ '@vue/shared': 3.5.24
estree-walker: 2.0.2
- magic-string: 0.30.19
+ magic-string: 0.30.21
postcss: 8.5.6
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.22':
+ '@vue/compiler-ssr@3.5.24':
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.24
+ '@vue/shared': 3.5.24
'@vue/compiler-vue2@2.7.16':
dependencies:
@@ -14754,9 +14844,9 @@ snapshots:
'@vue/language-core@2.2.12(typescript@5.9.3)':
dependencies:
'@volar/language-core': 2.4.15
- '@vue/compiler-dom': 3.5.22
+ '@vue/compiler-dom': 3.5.24
'@vue/compiler-vue2': 2.7.16
- '@vue/shared': 3.5.22
+ '@vue/shared': 3.5.24
alien-signals: 1.0.13
minimatch: 9.0.5
muggle-string: 0.4.1
@@ -14764,121 +14854,151 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- '@vue/language-core@3.1.1(typescript@5.9.3)':
+ '@vue/language-core@3.1.5(typescript@5.9.3)':
dependencies:
'@volar/language-core': 2.4.23
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
- alien-signals: 3.0.0
+ '@vue/compiler-dom': 3.5.24
+ '@vue/shared': 3.5.24
+ alien-signals: 3.1.0
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.3
optionalDependencies:
typescript: 5.9.3
- '@vue/reactivity@3.5.22':
+ '@vue/reactivity@3.5.24':
dependencies:
- '@vue/shared': 3.5.22
+ '@vue/shared': 3.5.24
- '@vue/runtime-core@3.5.22':
+ '@vue/runtime-core@3.5.24':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/reactivity': 3.5.24
+ '@vue/shared': 3.5.24
- '@vue/runtime-dom@3.5.22':
+ '@vue/runtime-dom@3.5.24':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/runtime-core': 3.5.22
- '@vue/shared': 3.5.22
- csstype: 3.1.3
+ '@vue/reactivity': 3.5.24
+ '@vue/runtime-core': 3.5.24
+ '@vue/shared': 3.5.24
+ csstype: 3.2.3
- '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3))':
+ '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
- vue: 3.5.22(typescript@5.9.3)
+ '@vue/compiler-ssr': 3.5.24
+ '@vue/shared': 3.5.24
+ vue: 3.5.24(typescript@5.9.3)
- '@vue/shared@3.5.22': {}
+ '@vue/shared@3.5.24': {}
- '@vue/test-utils@2.4.1(@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))':
+ '@vue/test-utils@2.4.6':
dependencies:
- js-beautify: 1.14.9
- vue: 3.5.22(typescript@5.9.3)
- vue-component-type-helpers: 1.8.4
- optionalDependencies:
- '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.3))
+ js-beautify: 1.15.4
+ vue-component-type-helpers: 2.2.12
'@webgpu/types@0.1.38': {}
- '@xhmikosr/archive-type@7.0.0':
+ '@xhmikosr/archive-type@7.1.0':
dependencies:
- file-type: 19.6.0
+ file-type: 20.5.0
+ transitivePeerDependencies:
+ - supports-color
- '@xhmikosr/bin-check@7.0.3':
+ '@xhmikosr/bin-check@7.1.0':
dependencies:
execa: 5.1.1
isexe: 2.0.0
- '@xhmikosr/bin-wrapper@13.0.5':
+ '@xhmikosr/bin-wrapper@13.2.0':
dependencies:
- '@xhmikosr/bin-check': 7.0.3
- '@xhmikosr/downloader': 15.0.1
+ '@xhmikosr/bin-check': 7.1.0
+ '@xhmikosr/downloader': 15.2.0
'@xhmikosr/os-filter-obj': 3.0.0
bin-version-check: 5.1.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
- '@xhmikosr/decompress-tar@8.0.1':
+ '@xhmikosr/decompress-tar@8.1.0':
dependencies:
- file-type: 19.6.0
+ file-type: 20.5.0
is-stream: 2.0.1
tar-stream: 3.1.7
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
- '@xhmikosr/decompress-tarbz2@8.0.2':
+ '@xhmikosr/decompress-tarbz2@8.1.0':
dependencies:
- '@xhmikosr/decompress-tar': 8.0.1
- file-type: 19.6.0
+ '@xhmikosr/decompress-tar': 8.1.0
+ file-type: 20.5.0
is-stream: 2.0.1
seek-bzip: 2.0.0
unbzip2-stream: 1.4.3
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
- '@xhmikosr/decompress-targz@8.0.1':
+ '@xhmikosr/decompress-targz@8.1.0':
dependencies:
- '@xhmikosr/decompress-tar': 8.0.1
- file-type: 19.6.0
+ '@xhmikosr/decompress-tar': 8.1.0
+ file-type: 20.5.0
is-stream: 2.0.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
- '@xhmikosr/decompress-unzip@7.0.0':
+ '@xhmikosr/decompress-unzip@7.1.0':
dependencies:
- file-type: 19.6.0
+ file-type: 20.5.0
get-stream: 6.0.1
yauzl: 3.2.0
+ transitivePeerDependencies:
+ - supports-color
- '@xhmikosr/decompress@10.0.1':
+ '@xhmikosr/decompress@10.2.0':
dependencies:
- '@xhmikosr/decompress-tar': 8.0.1
- '@xhmikosr/decompress-tarbz2': 8.0.2
- '@xhmikosr/decompress-targz': 8.0.1
- '@xhmikosr/decompress-unzip': 7.0.0
+ '@xhmikosr/decompress-tar': 8.1.0
+ '@xhmikosr/decompress-tarbz2': 8.1.0
+ '@xhmikosr/decompress-targz': 8.1.0
+ '@xhmikosr/decompress-unzip': 7.1.0
graceful-fs: 4.2.11
- make-dir: 4.0.0
strip-dirs: 3.0.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
- '@xhmikosr/downloader@15.0.1':
+ '@xhmikosr/downloader@15.2.0':
dependencies:
- '@xhmikosr/archive-type': 7.0.0
- '@xhmikosr/decompress': 10.0.1
+ '@xhmikosr/archive-type': 7.1.0
+ '@xhmikosr/decompress': 10.2.0
content-disposition: 0.5.4
- defaults: 3.0.0
+ defaults: 2.0.2
ext-name: 5.0.0
- file-type: 19.6.0
+ file-type: 20.5.0
filenamify: 6.0.0
get-stream: 6.0.1
got: 13.0.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ - supports-color
'@xhmikosr/os-filter-obj@3.0.0':
dependencies:
arch: 3.0.0
- abbrev@1.1.1: {}
+ '@xmldom/xmldom@0.9.8':
+ optional: true
+
+ abbrev@1.1.1:
+ optional: true
+
+ abbrev@2.0.0: {}
abbrev@3.0.1: {}
@@ -14893,6 +15013,11 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.2
+ negotiator: 1.0.0
+
acorn-import-attributes@1.9.5(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -14905,7 +15030,7 @@ snapshots:
acorn@8.15.0: {}
- adm-zip@0.5.10:
+ adm-zip@0.5.16:
optional: true
agent-base@4.3.0:
@@ -14915,23 +15040,18 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
optional: true
- agent-base@7.1.3: {}
+ agent-base@7.1.4: {}
aggregate-error@3.1.0:
dependencies:
clean-stack: 2.2.0
indent-string: 4.0.0
- aggregate-error@5.0.0:
- dependencies:
- clean-stack: 5.2.0
- indent-string: 5.0.0
-
aiscript-vscode@https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7:
dependencies:
vscode-languageclient: 9.0.1
@@ -14976,13 +15096,13 @@ snapshots:
ajv@8.17.1:
dependencies:
fast-deep-equal: 3.1.3
- fast-uri: 3.0.1
+ fast-uri: 3.1.0
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
alien-signals@1.0.13: {}
- alien-signals@3.0.0: {}
+ alien-signals@3.1.0: {}
analytics-utils@1.1.1(@types/dlv@1.1.5):
dependencies:
@@ -15013,17 +15133,15 @@ snapshots:
ansi-styles@5.2.0: {}
- ansi-styles@6.2.1: {}
+ ansi-styles@6.2.3: {}
ansis@3.17.0: {}
- any-promise@1.3.0: {}
-
app-root-path@3.1.0: {}
append-field@1.0.0: {}
- aproba@2.0.0:
+ aproba@2.1.0:
optional: true
arch@2.2.0: {}
@@ -15032,23 +15150,26 @@ snapshots:
archiver-utils@5.0.2:
dependencies:
- glob: 10.4.5
+ glob: 10.5.0
graceful-fs: 4.2.11
is-stream: 2.0.1
lazystream: 1.0.1
lodash: 4.17.21
normalize-path: 3.0.0
- readable-stream: 4.3.0
+ readable-stream: 4.7.0
archiver@7.0.1:
dependencies:
archiver-utils: 5.0.2
- async: 3.2.4
+ async: 3.2.6
buffer-crc32: 1.0.0
- readable-stream: 4.3.0
- readdir-glob: 1.1.2
+ readable-stream: 4.7.0
+ readdir-glob: 1.1.3
tar-stream: 3.1.7
zip-stream: 6.0.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
are-we-there-yet@2.0.0:
dependencies:
@@ -15066,7 +15187,7 @@ snapshots:
aria-query@5.1.3:
dependencies:
- deep-equal: 2.2.0
+ deep-equal: 2.2.3
aria-query@5.3.0:
dependencies:
@@ -15134,7 +15255,7 @@ snapshots:
asn1.js@5.4.1:
dependencies:
- bn.js: 4.12.0
+ bn.js: 4.12.2
inherits: 2.0.4
minimalistic-assert: 1.0.1
safer-buffer: 2.1.2
@@ -15143,13 +15264,13 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- asn1js@3.0.5:
+ asn1js@3.0.6:
dependencies:
- pvtsutils: 1.3.5
- pvutils: 1.1.3
+ pvtsutils: 1.3.6
+ pvutils: 1.1.5
tslib: 2.8.1
- assert-never@1.2.1: {}
+ assert-never@1.4.0: {}
assert-plus@1.0.0: {}
@@ -15159,7 +15280,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- ast-v8-to-istanbul@0.3.3:
+ ast-v8-to-istanbul@0.3.8:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
@@ -15177,7 +15298,7 @@ snapshots:
async@0.2.10: {}
- async@3.2.4: {}
+ async@3.2.6: {}
asynckit@0.4.0: {}
@@ -15187,16 +15308,16 @@ snapshots:
available-typed-arrays@1.0.7:
dependencies:
- possible-typed-array-names: 1.0.0
+ possible-typed-array-names: 1.1.0
- avvio@9.0.0:
+ avvio@9.1.0:
dependencies:
- '@fastify/error': 4.0.0
- fastq: 1.17.1
+ '@fastify/error': 4.2.0
+ fastq: 1.19.1
aws-sdk-client-mock@4.1.0:
dependencies:
- '@types/sinon': 17.0.3
+ '@types/sinon': 17.0.4
sinon: 18.0.1
tslib: 2.8.1
@@ -15206,41 +15327,44 @@ snapshots:
axios@0.24.0:
dependencies:
- follow-redirects: 1.15.9(debug@4.4.3)
+ follow-redirects: 1.15.11(debug@4.4.3)
transitivePeerDependencies:
- debug
- axios@1.12.2(debug@4.4.3):
+ axios@1.13.2(debug@4.4.3):
dependencies:
- follow-redirects: 1.15.9(debug@4.4.3)
- form-data: 4.0.4
+ follow-redirects: 1.15.11(debug@4.4.3)
+ form-data: 4.0.5
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
- b4a@1.6.4: {}
+ b4a@1.7.3: {}
babel-walk@3.0.0-canary-5:
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
bail@2.0.2: {}
balanced-match@1.0.2: {}
+ bare-events@2.8.1: {}
+
base64-js@1.5.1: {}
- baseline-browser-mapping@2.8.10: {}
+ baseline-browser-mapping@2.8.29: {}
bcrypt-pbkdf@1.0.2:
dependencies:
tweetnacl: 0.14.5
- bcryptjs@2.4.3: {}
+ bcryptjs@3.0.3: {}
- better-opn@3.0.2:
+ bidi-js@1.0.3:
dependencies:
- open: 8.4.2
+ require-from-string: 2.0.2
+ optional: true
bin-version-check@5.1.0:
dependencies:
@@ -15253,20 +15377,13 @@ snapshots:
execa: 5.1.1
find-versions: 5.1.0
- bl@4.1.0:
- dependencies:
- buffer: 5.7.1
- inherits: 2.0.4
- readable-stream: 3.6.2
- optional: true
-
blob-util@2.0.2: {}
bluebird@3.7.2: {}
blurhash@2.0.5: {}
- bn.js@4.12.0: {}
+ bn.js@4.12.2: {}
body-parser@1.20.3:
dependencies:
@@ -15285,16 +15402,30 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ body-parser@2.2.0:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.3(supports-color@10.2.2)
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.1
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
boolbase@1.0.0: {}
bowser@2.12.1: {}
- brace-expansion@1.1.11:
+ brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
+ brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -15302,20 +15433,20 @@ snapshots:
dependencies:
fill-range: 7.1.1
- broadcast-channel@7.1.0:
+ broadcast-channel@7.2.0:
dependencies:
- '@babel/runtime': 7.27.0
- oblivious-set: 1.4.0
+ '@babel/runtime': 7.28.4
+ oblivious-set: 2.0.0
p-queue: 6.6.2
unload: 2.4.1
- browserslist@4.26.3:
+ browserslist@4.28.0:
dependencies:
- baseline-browser-mapping: 2.8.10
- caniuse-lite: 1.0.30001746
- electron-to-chromium: 1.5.228
- node-releases: 2.0.21
- update-browserslist-db: 1.1.3(browserslist@4.26.3)
+ baseline-browser-mapping: 2.8.29
+ caniuse-lite: 1.0.30001755
+ electron-to-chromium: 1.5.255
+ node-releases: 2.0.27
+ update-browserslist-db: 1.1.4(browserslist@4.28.0)
buffer-crc32@0.2.13: {}
@@ -15342,14 +15473,14 @@ snapshots:
bufferutil@4.0.9:
dependencies:
- node-gyp-build: 4.6.0
+ node-gyp-build: 4.8.4
optional: true
- bullmq@5.61.0:
+ bullmq@5.64.1:
dependencies:
cron-parser: 4.9.0
- ioredis: 5.8.1
- msgpackr: 1.11.2
+ ioredis: 5.8.2
+ msgpackr: 1.11.5
node-abort-controller: 3.1.1
semver: 7.7.3
tslib: 2.8.1
@@ -15363,15 +15494,15 @@ snapshots:
dependencies:
streamsearch: 1.1.0
- bytes@3.1.2: {}
+ byte-counter@0.1.0: {}
- cac@6.7.14: {}
+ bytes@3.1.2: {}
cacache@19.0.1:
dependencies:
'@npmcli/fs': 4.0.0
fs-minipass: 3.0.3
- glob: 10.4.5
+ glob: 10.5.0
lru-cache: 10.4.3
minipass: 7.1.2
minipass-collect: 2.0.1
@@ -15379,7 +15510,7 @@ snapshots:
minipass-pipeline: 1.2.4
p-map: 7.0.3
ssri: 12.0.0
- tar: 7.5.1
+ tar: 7.5.2
unique-filename: 4.0.0
cacheable-lookup@7.0.0: {}
@@ -15394,15 +15525,15 @@ snapshots:
normalize-url: 8.1.0
responselike: 3.0.0
- cacheable-request@13.0.12:
+ cacheable-request@13.0.15:
dependencies:
'@types/http-cache-semantics': 4.0.4
get-stream: 9.0.1
http-cache-semantics: 4.2.0
- keyv: 5.5.3
+ keyv: 5.5.4
mimic-response: 4.0.0
normalize-url: 8.1.0
- responselike: 3.0.0
+ responselike: 4.0.2
cachedir@2.4.0: {}
@@ -15435,26 +15566,20 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
- browserslist: 4.26.3
- caniuse-lite: 1.0.30001746
+ browserslist: 4.28.0
+ caniuse-lite: 1.0.30001755
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001746: {}
+ caniuse-lite@1.0.30001755: {}
- canonicalize@1.0.8: {}
+ canonicalize@2.1.0: {}
- canvas-confetti@1.9.3: {}
-
- canvas@3.1.0:
- dependencies:
- node-addon-api: 7.1.1
- prebuild-install: 7.1.3
- optional: true
+ canvas-confetti@1.9.4: {}
caseless@0.12.0: {}
- cbor@9.0.2:
+ cbor@10.0.11:
dependencies:
nofilter: 3.1.0
@@ -15468,6 +15593,8 @@ snapshots:
loupe: 3.2.1
pathval: 2.0.1
+ chai@6.2.1: {}
+
chalk-template@1.1.2:
dependencies:
chalk: 5.6.2
@@ -15500,7 +15627,7 @@ snapshots:
chart.js@4.5.1:
dependencies:
- '@kurkle/color': 0.3.2
+ '@kurkle/color': 0.3.4
chartjs-adapter-date-fns@3.0.0(chart.js@4.5.1)(date-fns@4.1.0):
dependencies:
@@ -15545,7 +15672,7 @@ snapshots:
parse5: 7.3.0
parse5-htmlparser2-tree-adapter: 7.1.0
parse5-parser-stream: 7.1.2
- undici: 6.19.8
+ undici: 6.22.0
whatwg-mimetype: 4.0.0
cheerio@1.1.2:
@@ -15566,41 +15693,25 @@ snapshots:
dependencies:
readdirp: 4.1.2
- chownr@1.1.4:
- optional: true
-
chownr@2.0.0:
optional: true
chownr@3.0.0: {}
- chromatic@13.3.0: {}
+ chromatic@13.3.4: {}
ci-info@3.9.0: {}
- ci-info@4.3.0: {}
+ ci-info@4.3.1: {}
- cjs-module-lexer@1.2.2: {}
+ cjs-module-lexer@1.4.3: {}
clean-stack@2.2.0: {}
- clean-stack@5.2.0:
- dependencies:
- escape-string-regexp: 5.0.0
-
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
- cli-highlight@2.1.11:
- dependencies:
- chalk: 4.1.2
- highlight.js: 10.7.3
- mz: 2.7.0
- parse5: 5.1.1
- parse5-htmlparser2-tree-adapter: 6.0.1
- yargs: 16.2.0
-
cli-table3@0.6.1:
dependencies:
string-width: 4.2.3
@@ -15632,18 +15743,30 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ cliui@9.0.1:
+ dependencies:
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
+
cluster-key-slot@1.1.2: {}
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
+ color-convert@3.1.3:
+ dependencies:
+ color-name: 2.1.0
+
color-name@1.1.4: {}
+ color-name@2.1.0: {}
+
color-string@1.9.1:
dependencies:
color-name: 1.1.4
- simple-swizzle: 0.2.2
+ simple-swizzle: 0.2.4
color-support@1.1.3:
optional: true
@@ -15694,7 +15817,7 @@ snapshots:
crc32-stream: 6.0.0
is-stream: 2.0.1
normalize-path: 3.0.0
- readable-stream: 4.3.0
+ readable-stream: 4.7.0
concat-map@0.0.1: {}
@@ -15710,27 +15833,29 @@ snapshots:
ini: 1.3.8
proto-list: 1.2.4
- consola@3.4.0: {}
+ consola@3.4.2: {}
console-control-strings@1.1.0:
optional: true
constantinople@4.0.1:
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
content-disposition@0.5.4:
dependencies:
safe-buffer: 5.2.1
+ content-disposition@1.0.1: {}
+
content-type@1.0.5: {}
convert-source-map@2.0.0: {}
cookie-signature@1.0.6: {}
- cookie@0.6.0: {}
+ cookie-signature@1.2.2: {}
cookie@0.7.1: {}
@@ -15754,39 +15879,29 @@ snapshots:
crc32-stream@6.0.0:
dependencies:
crc-32: 1.2.2
- readable-stream: 4.3.0
+ readable-stream: 4.7.0
cron-parser@4.9.0:
dependencies:
- luxon: 3.3.0
+ luxon: 3.7.2
- cropperjs@2.0.1:
+ cropperjs@2.1.0:
dependencies:
- '@cropper/elements': 2.0.1
- '@cropper/utils': 2.0.1
+ '@cropper/elements': 2.1.0
+ '@cropper/utils': 2.1.0
cross-env@10.1.0:
dependencies:
'@epic-web/invariant': 1.0.0
cross-spawn: 7.0.6
- cross-env@7.0.3:
- dependencies:
- cross-spawn: 7.0.6
-
- cross-fetch@4.1.0(encoding@0.1.13):
- dependencies:
- node-fetch: 2.7.0(encoding@0.1.13)
- transitivePeerDependencies:
- - encoding
-
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
- css-declaration-sorter@7.2.0(postcss@8.5.6):
+ css-declaration-sorter@7.3.0(postcss@8.5.6):
dependencies:
postcss: 8.5.6
@@ -15814,24 +15929,24 @@ snapshots:
cssesc@3.0.0: {}
- cssnano-preset-default@7.0.9(postcss@8.5.6):
+ cssnano-preset-default@7.0.10(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
- css-declaration-sorter: 7.2.0(postcss@8.5.6)
+ browserslist: 4.28.0
+ css-declaration-sorter: 7.3.0(postcss@8.5.6)
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
postcss-calc: 10.1.1(postcss@8.5.6)
- postcss-colormin: 7.0.4(postcss@8.5.6)
- postcss-convert-values: 7.0.7(postcss@8.5.6)
- postcss-discard-comments: 7.0.4(postcss@8.5.6)
+ postcss-colormin: 7.0.5(postcss@8.5.6)
+ postcss-convert-values: 7.0.8(postcss@8.5.6)
+ postcss-discard-comments: 7.0.5(postcss@8.5.6)
postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
postcss-discard-empty: 7.0.1(postcss@8.5.6)
postcss-discard-overridden: 7.0.1(postcss@8.5.6)
postcss-merge-longhand: 7.0.5(postcss@8.5.6)
- postcss-merge-rules: 7.0.6(postcss@8.5.6)
+ postcss-merge-rules: 7.0.7(postcss@8.5.6)
postcss-minify-font-values: 7.0.1(postcss@8.5.6)
postcss-minify-gradients: 7.0.1(postcss@8.5.6)
- postcss-minify-params: 7.0.4(postcss@8.5.6)
+ postcss-minify-params: 7.0.5(postcss@8.5.6)
postcss-minify-selectors: 7.0.5(postcss@8.5.6)
postcss-normalize-charset: 7.0.1(postcss@8.5.6)
postcss-normalize-display-values: 7.0.1(postcss@8.5.6)
@@ -15839,11 +15954,11 @@ snapshots:
postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6)
postcss-normalize-string: 7.0.1(postcss@8.5.6)
postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6)
- postcss-normalize-unicode: 7.0.4(postcss@8.5.6)
+ postcss-normalize-unicode: 7.0.5(postcss@8.5.6)
postcss-normalize-url: 7.0.1(postcss@8.5.6)
postcss-normalize-whitespace: 7.0.1(postcss@8.5.6)
postcss-ordered-values: 7.0.2(postcss@8.5.6)
- postcss-reduce-initial: 7.0.4(postcss@8.5.6)
+ postcss-reduce-initial: 7.0.5(postcss@8.5.6)
postcss-reduce-transforms: 7.0.1(postcss@8.5.6)
postcss-svgo: 7.1.0(postcss@8.5.6)
postcss-unique-selectors: 7.0.4(postcss@8.5.6)
@@ -15852,9 +15967,9 @@ snapshots:
dependencies:
postcss: 8.5.6
- cssnano@7.1.1(postcss@8.5.6):
+ cssnano@7.1.2(postcss@8.5.6):
dependencies:
- cssnano-preset-default: 7.0.9(postcss@8.5.6)
+ cssnano-preset-default: 7.0.10(postcss@8.5.6)
lilconfig: 3.1.3
postcss: 8.5.6
@@ -15862,14 +15977,16 @@ snapshots:
dependencies:
css-tree: 2.2.1
- cssstyle@4.2.1:
+ cssstyle@5.3.3:
dependencies:
- '@asamuzakjp/css-color': 2.8.3
- rrweb-cssom: 0.8.0
+ '@asamuzakjp/css-color': 4.0.5
+ '@csstools/css-syntax-patches-for-csstree': 1.0.16
+ css-tree: 3.1.0
+ optional: true
- csstype@3.1.3: {}
+ csstype@3.2.3: {}
- cypress@15.4.0:
+ cypress@15.7.0:
dependencies:
'@cypress/request': 3.0.9
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
@@ -15882,12 +15999,12 @@ snapshots:
buffer: 5.7.1
cachedir: 2.4.0
chalk: 4.1.2
- ci-info: 4.3.0
+ ci-info: 4.3.1
cli-cursor: 3.1.0
cli-table3: 0.6.1
commander: 6.2.1
common-tags: 1.8.2
- dayjs: 1.11.18
+ dayjs: 1.11.19
debug: 4.4.3(supports-color@8.1.1)
enquirer: 2.4.1
eventemitter2: 6.4.7
@@ -15907,7 +16024,6 @@ snapshots:
process: 0.11.10
proxy-from-env: 1.0.0
request-progress: 3.0.0
- semver: 7.7.3
supports-color: 8.1.1
systeminformation: 5.27.7
tmp: 0.2.5
@@ -15919,12 +16035,13 @@ snapshots:
dependencies:
assert-plus: 1.0.0
- data-uri-to-buffer@4.0.0: {}
+ data-uri-to-buffer@4.0.1: {}
- data-urls@5.0.0:
+ data-urls@6.0.0:
dependencies:
whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
+ whatwg-url: 15.1.0
+ optional: true
data-view-buffer@1.0.2:
dependencies:
@@ -15944,13 +16061,9 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.2
- date-fns@2.30.0:
- dependencies:
- '@babel/runtime': 7.28.4
-
date-fns@4.1.0: {}
- dayjs@1.11.18: {}
+ dayjs@1.11.19: {}
de-indent@1.0.2: {}
@@ -15964,11 +16077,11 @@ snapshots:
optionalDependencies:
supports-color: 8.1.1
- debug@4.4.3(supports-color@10.2.0):
+ debug@4.4.3(supports-color@10.2.2):
dependencies:
ms: 2.1.3
optionalDependencies:
- supports-color: 10.2.0
+ supports-color: 10.2.2
debug@4.4.3(supports-color@5.5.0):
dependencies:
@@ -15989,32 +16102,37 @@ snapshots:
decamelize@1.2.0: {}
- decimal.js@10.5.0: {}
+ decimal.js@10.6.0:
+ optional: true
decode-bmp@0.2.1:
dependencies:
- '@canvas/image-data': 1.0.0
+ '@canvas/image-data': 1.1.0
to-data-view: 1.1.0
decode-ico@0.4.1:
dependencies:
- '@canvas/image-data': 1.0.0
+ '@canvas/image-data': 1.1.0
decode-bmp: 0.2.1
to-data-view: 1.1.0
- decode-named-character-reference@1.0.2:
+ decode-named-character-reference@1.2.0:
dependencies:
character-entities: 2.0.2
+ decompress-response@10.0.0:
+ dependencies:
+ mimic-response: 4.0.0
+
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
- dedent@1.6.0: {}
+ dedent@1.7.0: {}
deep-email-validator@0.1.21:
dependencies:
- '@types/disposable-email-domains': 1.0.2
+ '@types/disposable-email-domains': 1.0.6
axios: 0.24.0
disposable-email-domains: 1.0.62
mailcheck: 1.1.1
@@ -16023,18 +16141,19 @@ snapshots:
deep-eql@5.0.2: {}
- deep-equal@2.2.0:
+ deep-equal@2.2.3:
dependencies:
+ array-buffer-byte-length: 1.0.2
call-bind: 1.0.8
es-get-iterator: 1.1.3
get-intrinsic: 1.3.0
- is-arguments: 1.1.1
+ is-arguments: 1.2.0
is-array-buffer: 3.0.5
is-date-object: 1.1.0
is-regex: 1.2.1
is-shared-array-buffer: 1.0.4
isarray: 2.0.5
- object-is: 1.1.5
+ object-is: 1.1.6
object-keys: 1.1.1
object.assign: 4.1.7
regexp.prototype.flags: 1.5.4
@@ -16043,14 +16162,11 @@ snapshots:
which-collection: 1.0.2
which-typed-array: 1.1.19
- deep-extend@0.6.0:
- optional: true
-
deep-is@0.1.4: {}
- deepmerge@4.2.2: {}
+ deepmerge@4.3.1: {}
- defaults@3.0.0: {}
+ defaults@2.0.2: {}
defer-to-connect@2.0.1: {}
@@ -16060,8 +16176,6 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- define-lazy-prop@2.0.0: {}
-
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
@@ -16084,7 +16198,7 @@ snapshots:
detect-libc@1.0.3:
optional: true
- detect-libc@2.1.1: {}
+ detect-libc@2.1.2: {}
devlop@1.1.0:
dependencies:
@@ -16101,7 +16215,9 @@ snapshots:
diff@5.2.0: {}
- dijkstrajs@1.0.2: {}
+ diff@8.0.2: {}
+
+ dijkstrajs@1.0.3: {}
dir-glob@3.0.1:
dependencies:
@@ -16163,7 +16279,7 @@ snapshots:
domelementtype: 2.3.0
domhandler: 5.0.3
- dotenv@16.4.7: {}
+ dotenv@16.6.1: {}
dunder-proto@1.0.1:
dependencies:
@@ -16193,12 +16309,16 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.228: {}
+ electron-to-chromium@1.5.255: {}
+
+ emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
+ empathic@2.0.0: {}
+
encodeurl@1.0.2: {}
encodeurl@2.0.0: {}
@@ -16234,7 +16354,7 @@ snapshots:
err-code@2.0.3: {}
- error-ex@1.3.2:
+ error-ex@1.3.4:
dependencies:
is-arrayish: 0.2.1
@@ -16304,7 +16424,7 @@ snapshots:
call-bind: 1.0.8
get-intrinsic: 1.3.0
has-symbols: 1.1.0
- is-arguments: 1.1.1
+ is-arguments: 1.2.0
is-map: 2.0.3
is-set: 2.0.3
is-string: 1.1.1
@@ -16334,7 +16454,7 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- es-toolkit@1.27.0: {}
+ es-toolkit@1.42.0: {}
es6-promise@4.2.8:
optional: true
@@ -16344,41 +16464,63 @@ snapshots:
es6-promise: 4.2.8
optional: true
- esbuild-register@3.6.0(esbuild@0.25.10):
- dependencies:
- debug: 4.4.3(supports-color@10.2.0)
- esbuild: 0.25.10
- transitivePeerDependencies:
- - supports-color
-
- esbuild@0.25.10:
+ esbuild@0.25.11:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.10
- '@esbuild/android-arm': 0.25.10
- '@esbuild/android-arm64': 0.25.10
- '@esbuild/android-x64': 0.25.10
- '@esbuild/darwin-arm64': 0.25.10
- '@esbuild/darwin-x64': 0.25.10
- '@esbuild/freebsd-arm64': 0.25.10
- '@esbuild/freebsd-x64': 0.25.10
- '@esbuild/linux-arm': 0.25.10
- '@esbuild/linux-arm64': 0.25.10
- '@esbuild/linux-ia32': 0.25.10
- '@esbuild/linux-loong64': 0.25.10
- '@esbuild/linux-mips64el': 0.25.10
- '@esbuild/linux-ppc64': 0.25.10
- '@esbuild/linux-riscv64': 0.25.10
- '@esbuild/linux-s390x': 0.25.10
- '@esbuild/linux-x64': 0.25.10
- '@esbuild/netbsd-arm64': 0.25.10
- '@esbuild/netbsd-x64': 0.25.10
- '@esbuild/openbsd-arm64': 0.25.10
- '@esbuild/openbsd-x64': 0.25.10
- '@esbuild/openharmony-arm64': 0.25.10
- '@esbuild/sunos-x64': 0.25.10
- '@esbuild/win32-arm64': 0.25.10
- '@esbuild/win32-ia32': 0.25.10
- '@esbuild/win32-x64': 0.25.10
+ '@esbuild/aix-ppc64': 0.25.11
+ '@esbuild/android-arm': 0.25.11
+ '@esbuild/android-arm64': 0.25.11
+ '@esbuild/android-x64': 0.25.11
+ '@esbuild/darwin-arm64': 0.25.11
+ '@esbuild/darwin-x64': 0.25.11
+ '@esbuild/freebsd-arm64': 0.25.11
+ '@esbuild/freebsd-x64': 0.25.11
+ '@esbuild/linux-arm': 0.25.11
+ '@esbuild/linux-arm64': 0.25.11
+ '@esbuild/linux-ia32': 0.25.11
+ '@esbuild/linux-loong64': 0.25.11
+ '@esbuild/linux-mips64el': 0.25.11
+ '@esbuild/linux-ppc64': 0.25.11
+ '@esbuild/linux-riscv64': 0.25.11
+ '@esbuild/linux-s390x': 0.25.11
+ '@esbuild/linux-x64': 0.25.11
+ '@esbuild/netbsd-arm64': 0.25.11
+ '@esbuild/netbsd-x64': 0.25.11
+ '@esbuild/openbsd-arm64': 0.25.11
+ '@esbuild/openbsd-x64': 0.25.11
+ '@esbuild/openharmony-arm64': 0.25.11
+ '@esbuild/sunos-x64': 0.25.11
+ '@esbuild/win32-arm64': 0.25.11
+ '@esbuild/win32-ia32': 0.25.11
+ '@esbuild/win32-x64': 0.25.11
+
+ esbuild@0.27.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.0
+ '@esbuild/android-arm': 0.27.0
+ '@esbuild/android-arm64': 0.27.0
+ '@esbuild/android-x64': 0.27.0
+ '@esbuild/darwin-arm64': 0.27.0
+ '@esbuild/darwin-x64': 0.27.0
+ '@esbuild/freebsd-arm64': 0.27.0
+ '@esbuild/freebsd-x64': 0.27.0
+ '@esbuild/linux-arm': 0.27.0
+ '@esbuild/linux-arm64': 0.27.0
+ '@esbuild/linux-ia32': 0.27.0
+ '@esbuild/linux-loong64': 0.27.0
+ '@esbuild/linux-mips64el': 0.27.0
+ '@esbuild/linux-ppc64': 0.27.0
+ '@esbuild/linux-riscv64': 0.27.0
+ '@esbuild/linux-s390x': 0.27.0
+ '@esbuild/linux-x64': 0.27.0
+ '@esbuild/netbsd-arm64': 0.27.0
+ '@esbuild/netbsd-x64': 0.27.0
+ '@esbuild/openbsd-arm64': 0.27.0
+ '@esbuild/openbsd-x64': 0.27.0
+ '@esbuild/openharmony-arm64': 0.27.0
+ '@esbuild/sunos-x64': 0.27.0
+ '@esbuild/win32-arm64': 0.27.0
+ '@esbuild/win32-ia32': 0.27.0
+ '@esbuild/win32-x64': 0.27.0
escalade@3.2.0: {}
@@ -16409,21 +16551,21 @@ snapshots:
dependencies:
debug: 3.2.7(supports-color@8.1.1)
is-core-module: 2.16.1
- resolve: 1.22.10
+ resolve: 1.22.11
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.37.0):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1):
dependencies:
debug: 3.2.7(supports-color@8.1.1)
optionalDependencies:
- '@typescript-eslint/parser': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
- eslint: 9.37.0
+ '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ eslint: 9.39.1
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -16432,9 +16574,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7(supports-color@8.1.1)
doctrine: 2.1.0
- eslint: 9.37.0
+ eslint: 9.39.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.37.0)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -16446,25 +16588,25 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-vue@10.5.0(@stylistic/eslint-plugin@2.13.0(eslint@9.37.0)(typescript@5.9.3))(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(vue-eslint-parser@10.2.0(eslint@9.37.0)):
+ eslint-plugin-vue@10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0)
- eslint: 9.37.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ eslint: 9.39.1
natural-compare: 1.4.0
nth-check: 2.1.1
- postcss-selector-parser: 6.1.2
+ postcss-selector-parser: 7.1.0
semver: 7.7.3
- vue-eslint-parser: 10.2.0(eslint@9.37.0)
+ vue-eslint-parser: 10.2.0(eslint@9.39.1)
xml-name-validator: 4.0.0
optionalDependencies:
- '@stylistic/eslint-plugin': 2.13.0(eslint@9.37.0)(typescript@5.9.3)
- '@typescript-eslint/parser': 8.46.1(eslint@9.37.0)(typescript@5.9.3)
+ '@stylistic/eslint-plugin': 5.5.0(eslint@9.39.1)
+ '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
eslint-rule-docs@1.1.235: {}
@@ -16477,25 +16619,24 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.37.0:
+ eslint@9.39.1:
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0)
- '@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.21.0
- '@eslint/config-helpers': 0.4.0
- '@eslint/core': 0.16.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.37.0
- '@eslint/plugin-kit': 0.4.0
+ '@eslint/js': 9.39.1
+ '@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
escape-string-regexp: 4.0.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -16565,6 +16706,12 @@ snapshots:
eventemitter3@5.0.1: {}
+ events-universal@1.0.1:
+ dependencies:
+ bare-events: 2.8.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+
events@3.3.0: {}
execa@4.1.0:
@@ -16603,18 +16750,6 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 3.0.0
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.6
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
-
execa@9.6.0:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
@@ -16625,21 +16760,22 @@ snapshots:
is-plain-obj: 4.1.0
is-stream: 4.0.1
npm-run-path: 6.0.0
- pretty-ms: 9.2.0
+ pretty-ms: 9.3.0
signal-exit: 4.1.0
strip-final-newline: 4.0.0
- yoctocolors: 2.1.1
+ yoctocolors: 2.1.2
executable@4.1.1:
dependencies:
pify: 2.3.0
- expand-template@2.0.3:
- optional: true
+ exifreader@4.32.0:
+ optionalDependencies:
+ '@xmldom/xmldom': 0.9.8
- expect-type@1.2.1: {}
+ expect-type@1.2.2: {}
- exponential-backoff@3.1.1: {}
+ exponential-backoff@3.1.3: {}
express@4.21.2:
dependencies:
@@ -16677,9 +16813,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ express@5.1.0:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.0
+ content-disposition: 1.0.1
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.2.2
+ debug: 4.4.3(supports-color@10.2.2)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.0
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.2
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.0
+ serve-static: 2.2.0
+ statuses: 2.0.2
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
ext-list@2.2.2:
dependencies:
- mime-db: 1.52.0
+ mime-db: 1.54.0
ext-name@5.0.0:
dependencies:
@@ -16700,13 +16868,13 @@ snapshots:
extsprintf@1.3.0: {}
- fast-content-type-parse@2.0.0: {}
+ fast-content-type-parse@3.0.0: {}
fast-decode-uri-component@1.0.1: {}
fast-deep-equal@3.1.3: {}
- fast-fifo@1.3.0: {}
+ fast-fifo@1.3.2: {}
fast-glob@3.3.3:
dependencies:
@@ -16718,14 +16886,13 @@ snapshots:
fast-json-stable-stringify@2.1.0: {}
- fast-json-stringify@6.0.0:
+ fast-json-stringify@6.1.1:
dependencies:
- '@fastify/merge-json-schemas': 0.1.1
+ '@fastify/merge-json-schemas': 0.2.1
ajv: 8.17.1
ajv-formats: 3.0.1(ajv@8.17.1)
- fast-deep-equal: 3.1.3
- fast-uri: 2.4.0
- json-schema-ref-resolver: 1.0.1
+ fast-uri: 3.1.0
+ json-schema-ref-resolver: 3.0.0
rfdc: 1.4.1
fast-levenshtein@2.0.6: {}
@@ -16734,53 +16901,43 @@ snapshots:
dependencies:
fast-decode-uri-component: 1.0.1
- fast-redact@3.1.2: {}
-
fast-safe-stringify@2.1.1: {}
- fast-uri@2.4.0: {}
-
- fast-uri@3.0.1: {}
-
- fast-xml-parser@4.5.0:
- dependencies:
- strnum: 1.0.5
+ fast-uri@3.1.0: {}
fast-xml-parser@5.2.5:
dependencies:
strnum: 2.1.1
- fastify-plugin@4.5.1: {}
-
- fastify-plugin@5.0.0: {}
+ fastify-plugin@5.1.0: {}
fastify-raw-body@5.0.0:
dependencies:
- fastify-plugin: 5.0.0
- raw-body: 3.0.0
+ fastify-plugin: 5.1.0
+ raw-body: 3.0.1
secure-json-parse: 2.7.0
- fastify@5.6.1:
+ fastify@5.6.2:
dependencies:
- '@fastify/ajv-compiler': 4.0.0
- '@fastify/error': 4.0.0
- '@fastify/fast-json-stringify-compiler': 5.0.0
- '@fastify/proxy-addr': 5.0.0
+ '@fastify/ajv-compiler': 4.0.5
+ '@fastify/error': 4.2.0
+ '@fastify/fast-json-stringify-compiler': 5.0.3
+ '@fastify/proxy-addr': 5.1.0
abstract-logging: 2.0.1
- avvio: 9.0.0
- fast-json-stringify: 6.0.0
- find-my-way: 9.0.1
- light-my-request: 6.0.0
- pino: 9.2.0
+ avvio: 9.1.0
+ fast-json-stringify: 6.1.1
+ find-my-way: 9.3.0
+ light-my-request: 6.6.0
+ pino: 10.1.0
process-warning: 5.0.0
rfdc: 1.4.1
- secure-json-parse: 4.0.0
+ secure-json-parse: 4.1.0
semver: 7.7.3
toad-cache: 3.7.0
- fastq@1.17.1:
+ fastq@1.19.1:
dependencies:
- reusify: 1.0.4
+ reusify: 1.1.0
fd-slicer@1.1.0:
dependencies:
@@ -16790,14 +16947,14 @@ snapshots:
optionalDependencies:
picomatch: 4.0.3
- feed@4.2.2:
+ feed@5.1.0:
dependencies:
xml-js: 1.6.11
fetch-blob@3.2.0:
dependencies:
node-domexception: 1.0.0
- web-streams-polyfill: 3.2.1
+ web-streams-polyfill: 3.3.3
fflate@0.8.2: {}
@@ -16813,19 +16970,30 @@ snapshots:
dependencies:
flat-cache: 4.0.1
- file-type@19.6.0:
- dependencies:
- get-stream: 9.0.1
- strtok3: 9.0.1
- token-types: 6.0.0
- uint8array-extras: 1.4.0
-
- file-type@21.0.0:
+ file-type@20.5.0:
dependencies:
'@tokenizer/inflate': 0.2.7
- strtok3: 10.2.2
- token-types: 6.0.0
- uint8array-extras: 1.4.0
+ strtok3: 10.3.4
+ token-types: 6.1.1
+ uint8array-extras: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ file-type@21.1.0:
+ dependencies:
+ '@tokenizer/inflate': 0.3.1
+ strtok3: 10.3.4
+ token-types: 6.1.1
+ uint8array-extras: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ file-type@21.1.1:
+ dependencies:
+ '@tokenizer/inflate': 0.4.1
+ strtok3: 10.3.4
+ token-types: 6.1.1
+ uint8array-extras: 1.5.0
transitivePeerDependencies:
- supports-color
@@ -16851,13 +17019,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
- find-my-way@9.0.1:
+ finalhandler@2.1.0:
+ dependencies:
+ debug: 4.4.3(supports-color@10.2.2)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ find-my-way@9.3.0:
dependencies:
fast-deep-equal: 3.1.3
fast-querystring: 1.1.2
- safe-regex2: 4.0.0
-
- find-package-json@1.2.0: {}
+ safe-regex2: 5.0.0
find-up@4.1.0:
dependencies:
@@ -16869,23 +17046,16 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
- find-up@7.0.0:
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
- unicorn-magic: 0.1.0
-
find-versions@5.1.0:
dependencies:
semver-regex: 4.0.5
- fkill@9.0.0:
+ fkill@10.0.1:
dependencies:
- aggregate-error: 5.0.0
- execa: 8.0.1
- pid-port: 1.0.2
+ execa: 9.6.0
+ pid-port: 2.0.0
process-exists: 5.0.0
- ps-list: 8.1.1
+ ps-list: 9.0.0
taskkill: 5.0.0
flat-cache@4.0.1:
@@ -16900,9 +17070,9 @@ snapshots:
async: 0.2.10
which: 1.3.1
- follow-redirects@1.15.9(debug@4.4.3):
+ follow-redirects@1.15.11(debug@4.4.3):
optionalDependencies:
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
for-each@0.3.5:
dependencies:
@@ -16917,9 +17087,9 @@ snapshots:
form-data-encoder@2.1.4: {}
- form-data-encoder@4.0.2: {}
+ form-data-encoder@4.1.0: {}
- form-data@4.0.4:
+ form-data@4.0.5:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
@@ -16933,7 +17103,7 @@ snapshots:
formidable@3.5.4:
dependencies:
- '@paralleldrive/cuid2': 2.2.2
+ '@paralleldrive/cuid2': 2.3.1
dezalgo: 1.0.4
once: 1.4.0
@@ -16943,10 +17113,9 @@ snapshots:
fresh@0.5.2: {}
- from@0.1.7: {}
+ fresh@2.0.0: {}
- fs-constants@1.0.0:
- optional: true
+ from@0.1.7: {}
fs-extra@11.3.2:
dependencies:
@@ -16976,7 +17145,8 @@ snapshots:
dependencies:
minipass: 7.1.2
- fs.realpath@1.0.0: {}
+ fs.realpath@1.0.0:
+ optional: true
fsevents@2.3.3:
optional: true
@@ -16996,7 +17166,7 @@ snapshots:
gauge@3.0.2:
dependencies:
- aproba: 2.0.0
+ aproba: 2.1.0
color-support: 1.1.3
console-control-strings: 1.1.0
has-unicode: 2.0.1
@@ -17007,10 +17177,14 @@ snapshots:
wide-align: 1.1.5
optional: true
+ generator-function@2.0.1: {}
+
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
+ get-east-asian-width@1.4.0: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -17035,8 +17209,6 @@ snapshots:
get-stream@6.0.1: {}
- get-stream@8.0.1: {}
-
get-stream@9.0.1:
dependencies:
'@sec-ant/readable-stream': 0.4.1
@@ -17048,7 +17220,7 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
- get-tsconfig@4.10.1:
+ get-tsconfig@4.13.0:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -17056,9 +17228,6 @@ snapshots:
dependencies:
assert-plus: 1.0.0
- github-from-package@0.0.0:
- optional: true
-
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -17067,23 +17236,29 @@ snapshots:
dependencies:
is-glob: 4.0.3
- glob@10.4.5:
+ glob@10.5.0:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
- package-json-from-dist: 1.0.0
+ package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@11.0.3:
+ glob@11.1.0:
dependencies:
foreground-child: 3.3.1
jackspeak: 4.1.1
- minimatch: 10.0.3
+ minimatch: 10.1.1
minipass: 7.1.2
- package-json-from-dist: 1.0.0
- path-scurry: 2.0.0
+ package-json-from-dist: 1.0.1
+ path-scurry: 2.0.1
+
+ glob@13.0.0:
+ dependencies:
+ minimatch: 10.1.1
+ minipass: 7.1.2
+ path-scurry: 2.0.1
glob@7.2.3:
dependencies:
@@ -17095,21 +17270,13 @@ snapshots:
path-is-absolute: 1.0.1
optional: true
- glob@8.1.0:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 5.1.6
- once: 1.4.0
-
global-dirs@3.0.1:
dependencies:
ini: 2.0.0
globals@14.0.0: {}
- globals@16.4.0: {}
+ globals@16.5.0: {}
globalthis@1.0.4:
dependencies:
@@ -17129,7 +17296,7 @@ snapshots:
globrex@0.1.2: {}
- google-protobuf@3.21.2:
+ google-protobuf@3.21.4:
optional: true
gopd@1.2.0: {}
@@ -17148,16 +17315,16 @@ snapshots:
p-cancelable: 3.0.0
responselike: 3.0.0
- got@14.5.0:
+ got@14.6.4:
dependencies:
- '@sindresorhus/is': 7.0.1
- '@szmarczak/http-timer': 5.0.1
+ '@sindresorhus/is': 7.1.1
+ byte-counter: 0.1.0
cacheable-lookup: 7.0.0
- cacheable-request: 13.0.12
- decompress-response: 6.0.0
- form-data-encoder: 4.0.2
+ cacheable-request: 13.0.15
+ decompress-response: 10.0.0
+ form-data-encoder: 4.1.0
http2-wrapper: 2.2.1
- keyv: 5.5.3
+ keyv: 5.5.4
lowercase-keys: 3.0.0
p-cancelable: 4.0.1
responselike: 4.0.2
@@ -17167,13 +17334,13 @@ snapshots:
graphemer@1.4.0: {}
- graphql@16.11.0: {}
+ graphql@16.12.0: {}
hammerjs@2.0.8: {}
- happy-dom@20.0.7:
+ happy-dom@20.0.10:
dependencies:
- '@types/node': 20.19.19
+ '@types/node': 20.19.25
'@types/whatwg-mimetype': 3.0.2
whatwg-mimetype: 3.0.0
@@ -17181,7 +17348,7 @@ snapshots:
harfbuzzjs@0.4.13: {}
- has-bigints@1.0.2: {}
+ has-bigints@1.1.0: {}
has-flag@3.0.0: {}
@@ -17218,13 +17385,13 @@ snapshots:
hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.4
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
ccount: 2.0.1
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
- property-information: 7.0.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
@@ -17237,9 +17404,7 @@ snapshots:
headers-polyfill@4.0.3: {}
- highlight.js@10.7.3: {}
-
- highlight.js@11.10.0: {}
+ highlight.js@11.11.1: {}
hosted-git-info@2.8.9: {}
@@ -17252,6 +17417,7 @@ snapshots:
html-encoding-sniffer@4.0.0:
dependencies:
whatwg-encoding: 3.1.1
+ optional: true
html-entities@2.6.0: {}
@@ -17259,8 +17425,6 @@ snapshots:
html-void-elements@3.0.0: {}
- htmlescape@1.1.1: {}
-
htmlparser2@10.0.0:
dependencies:
domelementtype: 2.3.0
@@ -17275,7 +17439,7 @@ snapshots:
domutils: 2.8.0
entities: 2.2.0
- htmlparser2@8.0.1:
+ htmlparser2@8.0.2:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
@@ -17303,8 +17467,8 @@ snapshots:
http-proxy-agent@7.0.2:
dependencies:
- agent-base: 7.1.3
- debug: 4.4.3(supports-color@10.2.0)
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -17332,15 +17496,15 @@ snapshots:
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
optional: true
- https-proxy-agent@7.0.6(supports-color@10.2.0):
+ https-proxy-agent@7.0.6(supports-color@10.2.2):
dependencies:
- agent-base: 7.1.3
- debug: 4.4.3(supports-color@10.2.0)
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -17350,8 +17514,6 @@ snapshots:
human-signals@3.0.1: {}
- human-signals@5.0.0: {}
-
human-signals@8.0.1: {}
iconv-lite@0.4.24:
@@ -17374,13 +17536,13 @@ snapshots:
ignore-walk@8.0.0:
dependencies:
- minimatch: 10.0.3
+ minimatch: 10.1.1
ignore@5.3.2: {}
ignore@7.0.5: {}
- immutable@5.0.3: {}
+ immutable@5.1.4: {}
import-fresh@3.3.1:
dependencies:
@@ -17391,7 +17553,7 @@ snapshots:
dependencies:
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
- cjs-module-lexer: 1.2.2
+ cjs-module-lexer: 1.4.3
module-details-from-path: 1.0.4
import-lazy@4.0.0: {}
@@ -17400,14 +17562,13 @@ snapshots:
indent-string@4.0.0: {}
- indent-string@5.0.0: {}
-
- index-to-position@1.1.0: {}
+ index-to-position@1.2.0: {}
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
+ optional: true
inherits@2.0.4: {}
@@ -17431,11 +17592,11 @@ snapshots:
intersection-observer@0.12.2: {}
- ioredis@5.8.1:
+ ioredis@5.8.2:
dependencies:
'@ioredis/commands': 1.4.0
cluster-key-slot: 1.1.2
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
denque: 2.1.0
lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0
@@ -17447,6 +17608,8 @@ snapshots:
ios-haptics@0.1.4: {}
+ ip-address@10.0.1: {}
+
ip-address@9.0.5:
dependencies:
jsbn: 1.1.0
@@ -17464,9 +17627,9 @@ snapshots:
irregular-plurals@3.5.0: {}
- is-arguments@1.1.1:
+ is-arguments@1.2.0:
dependencies:
- call-bind: 1.0.8
+ call-bound: 1.0.4
has-tostringtag: 1.0.2
is-array-buffer@3.0.5:
@@ -17477,7 +17640,7 @@ snapshots:
is-arrayish@0.2.1: {}
- is-arrayish@0.3.2: {}
+ is-arrayish@0.3.4: {}
is-async-function@2.1.1:
dependencies:
@@ -17489,7 +17652,7 @@ snapshots:
is-bigint@1.1.0:
dependencies:
- has-bigints: 1.0.2
+ has-bigints: 1.1.0
is-boolean-object@1.2.2:
dependencies:
@@ -17513,8 +17676,6 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- is-docker@2.2.1: {}
-
is-expression@4.0.0:
dependencies:
acorn: 7.4.1
@@ -17530,9 +17691,13 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
- is-generator-function@1.0.10:
+ is-generator-function@1.1.2:
dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
is-glob@4.0.3:
dependencies:
@@ -17564,10 +17729,13 @@ snapshots:
is-plain-object@5.0.0: {}
- is-potential-custom-element-name@1.0.1: {}
+ is-potential-custom-element-name@1.0.1:
+ optional: true
is-promise@2.2.2: {}
+ is-promise@4.0.0: {}
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -17592,9 +17760,9 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- is-svg@5.1.0:
+ is-svg@6.1.0:
dependencies:
- fast-xml-parser: 4.5.0
+ '@file-type/xml': 0.4.4
is-symbol@1.1.1:
dependencies:
@@ -17623,10 +17791,6 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
- is-wsl@2.2.0:
- dependencies:
- is-docker: 2.2.1
-
isarray@1.0.0: {}
isarray@2.0.5: {}
@@ -17648,12 +17812,12 @@ snapshots:
istanbul-lib-source-maps@5.0.6:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
- istanbul-reports@3.1.7:
+ istanbul-reports@3.2.0:
dependencies:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
@@ -17682,13 +17846,13 @@ snapshots:
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
jest-util: 29.7.0
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -17710,16 +17874,19 @@ snapshots:
'@hapi/formula': 3.0.2
'@hapi/hoek': 11.0.7
'@hapi/pinpoint': 2.0.1
- '@hapi/tlds': 1.1.3
+ '@hapi/tlds': 1.1.4
'@hapi/topo': 6.0.2
'@standard-schema/spec': 1.0.0
- js-beautify@1.14.9:
+ js-beautify@1.15.4:
dependencies:
config-chain: 1.1.13
editorconfig: 1.0.4
- glob: 8.1.0
- nopt: 6.0.0
+ glob: 10.5.0
+ js-cookie: 3.0.5
+ nopt: 7.2.1
+
+ js-cookie@3.0.5: {}
js-levenshtein@1.1.6: {}
@@ -17729,7 +17896,7 @@ snapshots:
js-tokens@9.0.1: {}
- js-yaml@4.1.0:
+ js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -17739,34 +17906,33 @@ snapshots:
jschardet@3.1.4: {}
- jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5):
+ jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
- cssstyle: 4.2.1
- data-urls: 5.0.0
- decimal.js: 10.5.0
+ '@acemir/cssom': 0.9.23
+ '@asamuzakjp/dom-selector': 6.7.4
+ cssstyle: 5.3.3
+ data-urls: 6.0.0
+ decimal.js: 10.6.0
html-encoding-sniffer: 4.0.0
http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6(supports-color@10.2.0)
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.16
- parse5: 7.3.0
- rrweb-cssom: 0.8.0
+ parse5: 8.0.0
saxes: 6.0.0
symbol-tree: 3.2.4
- tough-cookie: 5.1.2
+ tough-cookie: 6.0.0
w3c-xmlserializer: 5.0.0
- webidl-conversions: 7.0.0
+ webidl-conversions: 8.0.0
whatwg-encoding: 3.1.1
whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
+ whatwg-url: 15.1.0
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
xml-name-validator: 5.0.0
- optionalDependencies:
- canvas: 3.1.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
+ optional: true
jsesc@3.1.0: {}
@@ -17774,9 +17940,9 @@ snapshots:
json-parse-even-better-errors@2.3.1: {}
- json-schema-ref-resolver@1.0.1:
+ json-schema-ref-resolver@3.0.0:
dependencies:
- fast-deep-equal: 3.1.3
+ dequal: 2.0.3
json-schema-traverse@0.4.1: {}
@@ -17810,14 +17976,12 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- jsonld@8.3.3(web-streams-polyfill@4.0.0):
+ jsonld@9.0.0:
dependencies:
- '@digitalbazaar/http-client': 3.4.1(web-streams-polyfill@4.0.0)
- canonicalize: 1.0.8
+ '@digitalbazaar/http-client': 4.2.0
+ canonicalize: 2.1.0
lru-cache: 6.0.0
- rdf-canonize: 3.4.0
- transitivePeerDependencies:
- - web-streams-polyfill
+ rdf-canonize: 5.0.0
jsonpointer@5.0.1: {}
@@ -17853,7 +18017,7 @@ snapshots:
just-extend@6.2.0: {}
- jwa@2.0.0:
+ jwa@2.0.1:
dependencies:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
@@ -17861,34 +18025,26 @@ snapshots:
jws@4.0.0:
dependencies:
- jwa: 2.0.0
+ jwa: 2.0.1
safe-buffer: 5.2.1
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
- keyv@5.5.3:
+ keyv@5.5.4:
dependencies:
'@keyv/serialize': 1.1.1
kind-of@6.0.3: {}
- ky-universal@0.11.0(ky@0.33.3)(web-streams-polyfill@4.0.0):
- dependencies:
- abort-controller: 3.0.0
- ky: 0.33.3
- node-fetch: 3.3.2
- optionalDependencies:
- web-streams-polyfill: 4.0.0
-
- ky@0.33.3: {}
+ ky@1.14.0: {}
lazy-ass@1.6.0: {}
lazystream@1.0.1:
dependencies:
- readable-stream: 2.3.7
+ readable-stream: 2.3.8
leven@3.1.0: {}
@@ -17897,11 +18053,11 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- light-my-request@6.0.0:
+ light-my-request@6.6.0:
dependencies:
- cookie: 0.6.0
- process-warning: 4.0.0
- set-cookie-parser: 2.6.0
+ cookie: 1.0.2
+ process-warning: 4.0.1
+ set-cookie-parser: 2.7.1
lilconfig@3.1.3: {}
@@ -17920,7 +18076,7 @@ snapshots:
optionalDependencies:
enquirer: 2.4.1
- load-esm@1.0.2: {}
+ load-esm@1.0.3: {}
load-tsconfig@0.2.5: {}
@@ -17932,14 +18088,8 @@ snapshots:
dependencies:
p-locate: 5.0.0
- locate-path@7.2.0:
- dependencies:
- p-locate: 6.0.0
-
lodash.defaults@4.2.0: {}
- lodash.get@4.4.2: {}
-
lodash.isarguments@3.1.0: {}
lodash.memoize@4.1.2: {}
@@ -17974,7 +18124,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.0.0: {}
+ lru-cache@11.2.2: {}
lru-cache@5.1.1:
dependencies:
@@ -17986,18 +18136,18 @@ snapshots:
lru-cache@8.0.5: {}
- luxon@3.3.0: {}
+ luxon@3.7.2: {}
lz-string@1.5.0: {}
- magic-string@0.30.19:
+ magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- magicast@0.3.5:
+ magicast@0.5.1:
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
source-map-js: 1.2.1
mailcheck@1.1.1: {}
@@ -18035,124 +18185,125 @@ snapshots:
map-stream@0.1.0: {}
- markdown-table@3.0.3: {}
+ markdown-table@3.0.4: {}
math-intrinsics@1.1.0: {}
matter-js@0.20.0: {}
- mdast-util-find-and-replace@3.0.1:
+ mdast-util-find-and-replace@3.0.2:
dependencies:
- '@types/mdast': 4.0.3
+ '@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
- mdast-util-from-markdown@2.0.0:
+ mdast-util-from-markdown@2.0.2:
dependencies:
- '@types/mdast': 4.0.3
- '@types/unist': 3.0.2
- decode-named-character-reference: 1.0.2
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.2.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
- micromark: 4.0.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-decode-string: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark: 4.0.2
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
- mdast-util-gfm-autolink-literal@2.0.0:
+ mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
- '@types/mdast': 4.0.3
+ '@types/mdast': 4.0.4
ccount: 2.0.1
devlop: 1.1.0
- mdast-util-find-and-replace: 3.0.1
- micromark-util-character: 2.1.0
+ mdast-util-find-and-replace: 3.0.2
+ micromark-util-character: 2.1.1
- mdast-util-gfm-footnote@2.0.0:
+ mdast-util-gfm-footnote@2.1.0:
dependencies:
- '@types/mdast': 4.0.3
+ '@types/mdast': 4.0.4
devlop: 1.1.0
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
- micromark-util-normalize-identifier: 2.0.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
- '@types/mdast': 4.0.3
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@2.0.0:
dependencies:
- '@types/mdast': 4.0.3
+ '@types/mdast': 4.0.4
devlop: 1.1.0
- markdown-table: 3.0.3
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-task-list-item@2.0.0:
dependencies:
- '@types/mdast': 4.0.3
+ '@types/mdast': 4.0.4
devlop: 1.1.0
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
- mdast-util-gfm@3.0.0:
+ mdast-util-gfm@3.1.0:
dependencies:
- mdast-util-from-markdown: 2.0.0
- mdast-util-gfm-autolink-literal: 2.0.0
- mdast-util-gfm-footnote: 2.0.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 2.0.0
- mdast-util-to-markdown: 2.1.0
+ mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@4.1.0:
dependencies:
- '@types/mdast': 4.0.3
- unist-util-is: 6.0.0
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
mdast-util-to-hast@13.2.0:
dependencies:
'@types/hast': 3.0.4
- '@types/mdast': 4.0.3
- '@ungap/structured-clone': 1.2.0
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
devlop: 1.1.0
- micromark-util-sanitize-uri: 2.0.0
+ micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
- vfile: 6.0.1
+ vfile: 6.0.3
- mdast-util-to-markdown@2.1.0:
+ mdast-util-to-markdown@2.1.2:
dependencies:
- '@types/mdast': 4.0.3
- '@types/unist': 3.0.2
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
longest-streak: 3.1.0
mdast-util-phrasing: 4.1.0
mdast-util-to-string: 4.0.0
- micromark-util-decode-string: 2.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
unist-util-visit: 5.0.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
- '@types/mdast': 4.0.3
+ '@types/mdast': 4.0.4
mdn-data@2.0.28: {}
@@ -18160,12 +18311,14 @@ snapshots:
media-typer@0.3.0: {}
- mediabunny@1.23.0:
+ media-typer@1.1.0: {}
+
+ mediabunny@1.25.1:
dependencies:
'@types/dom-mediacapture-transform': 0.1.11
'@types/dom-webcodecs': 0.1.13
- meilisearch@0.53.0: {}
+ meilisearch@0.54.0: {}
memoizerific@1.11.3:
dependencies:
@@ -18175,7 +18328,7 @@ snapshots:
meow@9.0.0:
dependencies:
- '@types/minimist': 1.2.2
+ '@types/minimist': 1.2.5
camelcase-keys: 6.2.2
decamelize: 1.2.0
decamelize-keys: 1.1.1
@@ -18190,6 +18343,8 @@ snapshots:
merge-descriptors@1.0.3: {}
+ merge-descriptors@2.0.0: {}
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -18200,198 +18355,194 @@ snapshots:
dependencies:
'@twemoji/parser': 16.0.0
- microformats-parser@2.0.4:
+ micromark-core-commonmark@2.0.3:
dependencies:
- parse5: 7.3.0
-
- micromark-core-commonmark@2.0.0:
- dependencies:
- decode-named-character-reference: 1.0.2
+ decode-named-character-reference: 1.2.0
devlop: 1.1.0
- micromark-factory-destination: 2.0.0
- micromark-factory-label: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-factory-title: 2.0.0
- micromark-factory-whitespace: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-html-tag-name: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-subtokenize: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-extension-gfm-autolink-literal@2.0.0:
+ micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-extension-gfm-footnote@2.0.0:
+ micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
- micromark-core-commonmark: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-extension-gfm-strikethrough@2.0.0:
+ micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-extension-gfm-table@2.0.0:
+ micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
- micromark-util-types: 2.0.0
+ micromark-util-types: 2.0.2
- micromark-extension-gfm-task-list-item@2.0.1:
+ micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm@3.0.0:
dependencies:
- micromark-extension-gfm-autolink-literal: 2.0.0
- micromark-extension-gfm-footnote: 2.0.0
- micromark-extension-gfm-strikethrough: 2.0.0
- micromark-extension-gfm-table: 2.0.0
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0
- micromark-extension-gfm-task-list-item: 2.0.1
- micromark-util-combine-extensions: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-factory-destination@2.0.0:
+ micromark-factory-destination@2.0.1:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-factory-label@2.0.0:
+ micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-factory-space@2.0.0:
+ micromark-factory-space@2.0.1:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-types: 2.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
- micromark-factory-title@2.0.0:
+ micromark-factory-title@2.0.1:
dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-factory-whitespace@2.0.0:
+ micromark-factory-whitespace@2.0.1:
dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-util-character@2.1.0:
+ micromark-util-character@2.1.1:
dependencies:
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-util-chunked@2.0.0:
+ micromark-util-chunked@2.0.1:
dependencies:
- micromark-util-symbol: 2.0.0
+ micromark-util-symbol: 2.0.1
- micromark-util-classify-character@2.0.0:
+ micromark-util-classify-character@2.0.1:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-util-combine-extensions@2.0.0:
+ micromark-util-combine-extensions@2.0.1:
dependencies:
- micromark-util-chunked: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-util-decode-numeric-character-reference@2.0.1:
+ micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
- micromark-util-symbol: 2.0.0
+ micromark-util-symbol: 2.0.1
- micromark-util-decode-string@2.0.0:
+ micromark-util-decode-string@2.0.1:
dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 2.1.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-symbol: 2.0.0
+ decode-named-character-reference: 1.2.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
- micromark-util-encode@2.0.0: {}
+ micromark-util-encode@2.0.1: {}
- micromark-util-html-tag-name@2.0.0: {}
+ micromark-util-html-tag-name@2.0.1: {}
- micromark-util-normalize-identifier@2.0.0:
+ micromark-util-normalize-identifier@2.0.1:
dependencies:
- micromark-util-symbol: 2.0.0
+ micromark-util-symbol: 2.0.1
- micromark-util-resolve-all@2.0.0:
+ micromark-util-resolve-all@2.0.1:
dependencies:
- micromark-util-types: 2.0.0
+ micromark-util-types: 2.0.2
- micromark-util-sanitize-uri@2.0.0:
+ micromark-util-sanitize-uri@2.0.1:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-encode: 2.0.0
- micromark-util-symbol: 2.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
- micromark-util-subtokenize@2.0.0:
+ micromark-util-subtokenize@2.1.0:
dependencies:
devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-util-symbol@2.0.0: {}
+ micromark-util-symbol@2.0.1: {}
- micromark-util-types@2.0.0: {}
+ micromark-util-types@2.0.2: {}
- micromark@4.0.0:
+ micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
- debug: 4.4.3(supports-color@10.2.0)
- decode-named-character-reference: 1.0.2
+ debug: 4.4.3(supports-color@10.2.2)
+ decode-named-character-reference: 1.2.0
devlop: 1.1.0
- micromark-core-commonmark: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-combine-extensions: 2.0.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-encode: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-subtokenize: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
transitivePeerDependencies:
- supports-color
@@ -18402,10 +18553,16 @@ snapshots:
mime-db@1.52.0: {}
+ mime-db@1.54.0: {}
+
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.2:
+ dependencies:
+ mime-db: 1.54.0
+
mime@1.6.0: {}
mime@2.6.0: {}
@@ -18428,21 +18585,25 @@ snapshots:
dependencies:
'@isaacs/brace-expansion': 5.0.0
+ minimatch@10.1.1:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+
minimatch@3.1.2:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimatch@5.1.6:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimatch@9.0.1:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimatch@9.0.5:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimist-options@4.1.0:
dependencies:
@@ -18495,9 +18656,6 @@ snapshots:
dependencies:
minipass: 7.1.2
- mkdirp-classic@0.5.3:
- optional: true
-
mkdirp@0.5.6:
dependencies:
minimist: 1.2.8
@@ -18505,10 +18663,6 @@ snapshots:
mkdirp@1.0.4:
optional: true
- mnemonist@0.40.0:
- dependencies:
- obliterator: 2.0.4
-
mock-socket@9.3.1: {}
module-details-from-path@1.0.4: {}
@@ -18519,35 +18673,35 @@ snapshots:
ms@3.0.0-canary.202508261828: {}
- msgpackr-extract@3.0.2:
+ msgpackr-extract@3.0.3:
dependencies:
- node-gyp-build-optional-packages: 5.0.7
+ node-gyp-build-optional-packages: 5.2.2
optionalDependencies:
- '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.2
- '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.2
- '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.2
- '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.2
- '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.2
- '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.2
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3
optional: true
- msgpackr@1.11.2:
+ msgpackr@1.11.5:
optionalDependencies:
- msgpackr-extract: 3.0.2
+ msgpackr-extract: 3.0.3
- msw-storybook-addon@2.0.6(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3)):
+ msw-storybook-addon@2.0.6(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3)):
dependencies:
is-node-process: 1.2.0
- msw: 2.11.5(@types/node@22.18.10)(typescript@5.9.3)
+ msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
- msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3):
+ msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3):
dependencies:
- '@inquirer/confirm': 5.1.18(@types/node@22.18.10)
- '@mswjs/interceptors': 0.39.7
+ '@inquirer/confirm': 5.1.21(@types/node@24.10.1)
+ '@mswjs/interceptors': 0.40.0
'@open-draft/deferred-promise': 2.2.0
'@types/statuses': 2.0.6
cookie: 1.0.2
- graphql: 16.11.0
+ graphql: 16.12.0
headers-polyfill: 4.0.3
is-node-process: 1.2.0
outvariant: 1.4.3
@@ -18579,23 +18733,14 @@ snapshots:
mute-stream@2.0.0: {}
- mylas@2.1.13: {}
+ mylas@2.1.14: {}
- mz@2.7.0:
- dependencies:
- any-promise: 1.3.0
- object-assign: 4.1.1
- thenify-all: 1.6.0
-
- nan@2.22.2: {}
+ nan@2.23.1: {}
nanoid@3.3.11: {}
nanoid@5.1.6: {}
- napi-build-utils@2.0.0:
- optional: true
-
natural-compare@1.4.0: {}
ncp@2.0.0: {}
@@ -18604,7 +18749,7 @@ snapshots:
dependencies:
debug: 3.2.7(supports-color@8.1.1)
iconv-lite: 0.4.24
- sax: 1.4.1
+ sax: 1.4.3
transitivePeerDependencies:
- supports-color
@@ -18616,29 +18761,20 @@ snapshots:
netmask@2.0.2: {}
- nice-napi@1.0.2:
- dependencies:
- node-addon-api: 3.2.1
- node-gyp-build: 4.6.0
- optional: true
-
nise@6.1.1:
dependencies:
'@sinonjs/commons': 3.0.1
'@sinonjs/fake-timers': 13.0.5
'@sinonjs/text-encoding': 0.7.3
just-extend: 6.2.0
- path-to-regexp: 8.2.0
+ path-to-regexp: 8.3.0
- node-abi@3.77.0:
+ node-abi@3.85.0:
dependencies:
semver: 7.7.3
node-abort-controller@3.1.1: {}
- node-addon-api@3.2.1:
- optional: true
-
node-addon-api@7.1.1:
optional: true
@@ -18655,39 +18791,47 @@ snapshots:
whatwg-url: 5.0.0
optionalDependencies:
encoding: 0.1.13
+ optional: true
node-fetch@3.3.2:
dependencies:
- data-uri-to-buffer: 4.0.0
+ data-uri-to-buffer: 4.0.1
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
- node-gyp-build-optional-packages@5.0.7:
+ node-gyp-build-optional-packages@5.2.2:
+ dependencies:
+ detect-libc: 2.1.2
optional: true
- node-gyp-build@4.6.0:
+ node-gyp-build@4.8.4:
optional: true
- node-gyp@11.2.0:
+ node-gyp@11.5.0:
dependencies:
env-paths: 2.2.1
- exponential-backoff: 3.1.1
+ exponential-backoff: 3.1.3
graceful-fs: 4.2.11
make-fetch-happen: 14.0.3
nopt: 8.1.0
proc-log: 5.0.0
semver: 7.7.3
- tar: 7.5.1
+ tar: 7.5.2
tinyglobby: 0.2.15
which: 5.0.0
transitivePeerDependencies:
- supports-color
- node-releases@2.0.21: {}
+ node-html-parser@7.0.1:
+ dependencies:
+ css-select: 5.2.2
+ he: 1.2.0
- nodemailer@7.0.9: {}
+ node-releases@2.0.27: {}
- nodemon@3.1.10:
+ nodemailer@7.0.10: {}
+
+ nodemon@3.1.11:
dependencies:
chokidar: 4.0.3
debug: 4.4.3(supports-color@5.5.0)
@@ -18697,23 +18841,19 @@ snapshots:
semver: 7.7.3
simple-update-notifier: 2.0.0
supports-color: 5.5.0
- touch: 3.1.0
+ touch: 3.1.1
undefsafe: 2.0.5
nofilter@3.1.0: {}
- nopt@1.0.10:
- dependencies:
- abbrev: 1.1.1
-
nopt@5.0.0:
dependencies:
abbrev: 1.1.1
optional: true
- nopt@6.0.0:
+ nopt@7.2.1:
dependencies:
- abbrev: 1.1.1
+ abbrev: 2.0.0
nopt@8.1.0:
dependencies:
@@ -18722,7 +18862,7 @@ snapshots:
normalize-package-data@2.5.0:
dependencies:
hosted-git-info: 2.8.9
- resolve: 1.22.10
+ resolve: 1.22.11
semver: 5.7.2
validate-npm-package-license: 3.0.4
@@ -18767,8 +18907,6 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nwsapi@2.2.16: {}
-
oauth2orize-pkce@0.1.2: {}
oauth2orize@1.12.0:
@@ -18785,7 +18923,7 @@ snapshots:
object-inspect@1.13.4: {}
- object-is@1.1.5:
+ object-is@1.1.6:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
@@ -18821,11 +18959,9 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
- obliterator@2.0.4: {}
+ oblivious-set@2.0.0: {}
- oblivious-set@1.4.0: {}
-
- on-exit-leak-free@2.1.0: {}
+ on-exit-leak-free@2.1.2: {}
on-finished@2.4.1:
dependencies:
@@ -18851,21 +18987,15 @@ snapshots:
regex: 6.0.1
regex-recursion: 6.0.2
- open@8.4.2:
- dependencies:
- define-lazy-prop: 2.0.0
- is-docker: 2.2.1
- is-wsl: 2.2.0
-
openapi-types@12.1.3: {}
- openapi-typescript@7.9.1(typescript@5.9.3):
+ openapi-typescript@7.10.1(typescript@5.9.3):
dependencies:
- '@redocly/openapi-core': 1.34.5(supports-color@10.2.0)
+ '@redocly/openapi-core': 1.34.5(supports-color@10.2.2)
ansi-colors: 4.1.3
change-case: 5.4.4
parse-json: 8.3.0
- supports-color: 10.2.0
+ supports-color: 10.2.2
typescript: 5.9.3
yargs-parser: 21.1.1
@@ -18908,10 +19038,6 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
- p-limit@4.0.0:
- dependencies:
- yocto-queue: 1.2.1
-
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
@@ -18920,10 +19046,6 @@ snapshots:
dependencies:
p-limit: 3.1.0
- p-locate@6.0.0:
- dependencies:
- p-limit: 4.0.0
-
p-map@4.0.0:
dependencies:
aggregate-error: 3.1.0
@@ -18941,7 +19063,7 @@ snapshots:
p-try@2.2.0: {}
- package-json-from-dist@1.0.0: {}
+ package-json-from-dist@1.0.1: {}
parent-module@1.0.1:
dependencies:
@@ -18950,24 +19072,20 @@ snapshots:
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.27.1
- error-ex: 1.3.2
+ error-ex: 1.3.4
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
parse-json@8.3.0:
dependencies:
'@babel/code-frame': 7.27.1
- index-to-position: 1.1.0
+ index-to-position: 1.2.0
type-fest: 4.41.0
parse-ms@4.0.0: {}
parse-srcset@1.0.2: {}
- parse5-htmlparser2-tree-adapter@6.0.1:
- dependencies:
- parse5: 6.0.1
-
parse5-htmlparser2-tree-adapter@7.1.0:
dependencies:
domhandler: 5.0.3
@@ -18977,22 +19095,21 @@ snapshots:
dependencies:
parse5: 7.3.0
- parse5@5.1.1: {}
-
- parse5@6.0.1: {}
-
parse5@7.3.0:
dependencies:
entities: 6.0.1
+ parse5@8.0.0:
+ dependencies:
+ entities: 6.0.1
+ optional: true
+
parseurl@1.3.3: {}
path-browserify@1.0.1: {}
path-exists@4.0.0: {}
- path-exists@5.0.0: {}
-
path-is-absolute@1.0.1:
optional: true
@@ -19007,16 +19124,16 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
- path-scurry@2.0.0:
+ path-scurry@2.0.1:
dependencies:
- lru-cache: 11.0.0
+ lru-cache: 11.2.2
minipass: 7.1.2
path-to-regexp@0.1.12: {}
path-to-regexp@6.3.0: {}
- path-to-regexp@8.2.0: {}
+ path-to-regexp@8.3.0: {}
path-type@4.0.0: {}
@@ -19028,10 +19145,6 @@ snapshots:
dependencies:
through: 2.3.8
- peek-readable@5.3.1: {}
-
- peek-readable@7.0.0: {}
-
pend@1.2.0: {}
performance-now@2.1.0: {}
@@ -19069,7 +19182,7 @@ snapshots:
pgpass@1.0.5:
dependencies:
- split2: 4.1.0
+ split2: 4.2.0
photoswipe@5.4.4: {}
@@ -19079,42 +19192,41 @@ snapshots:
picomatch@4.0.3: {}
- pid-port@1.0.2:
+ pid-port@2.0.0:
dependencies:
- execa: 8.0.1
+ execa: 9.6.0
pify@2.3.0: {}
- pino-abstract-transport@1.2.0:
+ pino-abstract-transport@2.0.0:
dependencies:
- readable-stream: 4.3.0
- split2: 4.1.0
+ split2: 4.2.0
pino-std-serializers@7.0.0: {}
- pino@9.2.0:
+ pino@10.1.0:
dependencies:
+ '@pinojs/redact': 0.4.0
atomic-sleep: 1.0.0
- fast-redact: 3.1.2
- on-exit-leak-free: 2.1.0
- pino-abstract-transport: 1.2.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 2.0.0
pino-std-serializers: 7.0.0
- process-warning: 3.0.0
+ process-warning: 5.0.0
quick-format-unescaped: 4.0.4
real-require: 0.2.0
- safe-stable-stringify: 2.4.2
- sonic-boom: 4.0.1
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.0
thread-stream: 3.1.0
- piscina@4.4.0:
+ piscina@4.9.2:
optionalDependencies:
- nice-napi: 1.0.2
+ '@napi-rs/nice': 1.1.1
- pkce-challenge@4.1.0: {}
+ pkce-challenge@5.0.0: {}
- plimit-lit@1.5.0:
+ plimit-lit@1.6.1:
dependencies:
- queue-lit: 1.5.0
+ queue-lit: 1.5.2
plur@4.0.0:
dependencies:
@@ -19124,13 +19236,13 @@ snapshots:
pngjs@5.0.0: {}
- pnpm@10.18.2: {}
+ pnpm@10.23.0: {}
- polished@4.2.2:
+ polished@4.3.1:
dependencies:
'@babel/runtime': 7.28.4
- possible-typed-array-names@1.0.0: {}
+ possible-typed-array-names@1.1.0: {}
postcss-calc@10.1.1(postcss@8.5.6):
dependencies:
@@ -19138,21 +19250,21 @@ snapshots:
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
- postcss-colormin@7.0.4(postcss@8.5.6):
+ postcss-colormin@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-convert-values@7.0.7(postcss@8.5.6):
+ postcss-convert-values@7.0.8(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-discard-comments@7.0.4(postcss@8.5.6):
+ postcss-discard-comments@7.0.5(postcss@8.5.6):
dependencies:
postcss: 8.5.6
postcss-selector-parser: 7.1.0
@@ -19173,11 +19285,11 @@ snapshots:
dependencies:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- stylehacks: 7.0.5(postcss@8.5.6)
+ stylehacks: 7.0.6(postcss@8.5.6)
- postcss-merge-rules@7.0.6(postcss@8.5.6):
+ postcss-merge-rules@7.0.7(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
caniuse-api: 3.0.0
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
@@ -19195,9 +19307,9 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-minify-params@7.0.4(postcss@8.5.6):
+ postcss-minify-params@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -19237,9 +19349,9 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-normalize-unicode@7.0.4(postcss@8.5.6):
+ postcss-normalize-unicode@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -19259,9 +19371,9 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-reduce-initial@7.0.4(postcss@8.5.6):
+ postcss-reduce-initial@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
caniuse-api: 3.0.0
postcss: 8.5.6
@@ -19270,11 +19382,6 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-selector-parser@6.1.2:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
postcss-selector-parser@7.1.0:
dependencies:
cssesc: 3.0.0
@@ -19309,22 +19416,6 @@ snapshots:
dependencies:
xtend: 4.0.2
- prebuild-install@7.1.3:
- dependencies:
- detect-libc: 2.1.1
- expand-template: 2.0.3
- github-from-package: 0.0.0
- minimist: 1.2.8
- mkdirp-classic: 0.5.3
- napi-build-utils: 2.0.0
- node-abi: 3.77.0
- pump: 3.0.3
- rc: 1.2.8
- simple-get: 4.0.1
- tar-fs: 2.1.4
- tunnel-agent: 0.6.0
- optional: true
-
prelude-ls@1.2.1: {}
prettier@3.6.2: {}
@@ -19341,9 +19432,9 @@ snapshots:
dependencies:
'@jest/schemas': 29.6.3
ansi-styles: 5.2.0
- react-is: 18.2.0
+ react-is: 18.3.1
- pretty-ms@9.2.0:
+ pretty-ms@9.3.0:
dependencies:
parse-ms: 4.0.0
@@ -19370,9 +19461,7 @@ snapshots:
process-nextick-args@2.0.1: {}
- process-warning@3.0.0: {}
-
- process-warning@4.0.0: {}
+ process-warning@4.0.1: {}
process-warning@5.0.0: {}
@@ -19392,7 +19481,7 @@ snapshots:
dependencies:
asap: 2.0.6
- property-information@7.0.0: {}
+ property-information@7.1.0: {}
proto-list@1.2.4: {}
@@ -19407,6 +19496,8 @@ snapshots:
ps-list@8.1.1: {}
+ ps-list@9.0.0: {}
+
ps-tree@1.2.0:
dependencies:
event-stream: 3.3.4
@@ -19438,7 +19529,7 @@ snapshots:
jstransformer: 1.0.0
pug-error: 2.1.0
pug-walk: 2.0.0
- resolve: 1.22.10
+ resolve: 1.22.11
pug-lexer@5.0.1:
dependencies:
@@ -19489,11 +19580,11 @@ snapshots:
punycode@2.3.1: {}
- pvtsutils@1.3.5:
+ pvtsutils@1.3.6:
dependencies:
tslib: 2.8.1
- pvutils@1.1.3: {}
+ pvutils@1.1.5: {}
qr-code-styling@1.9.2:
dependencies:
@@ -19501,13 +19592,13 @@ snapshots:
qr-scanner@1.4.2:
dependencies:
- '@types/offscreencanvas': 2019.7.0
+ '@types/offscreencanvas': 2019.7.3
qrcode-generator@1.5.2: {}
qrcode@1.5.4:
dependencies:
- dijkstrajs: 1.0.2
+ dijkstrajs: 1.0.3
pngjs: 5.0.0
yargs: 15.4.1
@@ -19519,12 +19610,10 @@ snapshots:
dependencies:
side-channel: 1.1.0
- queue-lit@1.5.0: {}
+ queue-lit@1.5.2: {}
queue-microtask@1.2.3: {}
- queue-tick@1.0.1: {}
-
quick-format-unescaped@4.0.4: {}
quick-lru@4.0.1: {}
@@ -19546,30 +19635,22 @@ snapshots:
iconv-lite: 0.4.24
unpipe: 1.0.0
- raw-body@3.0.0:
+ raw-body@3.0.1:
dependencies:
bytes: 3.1.2
http-errors: 2.0.0
- iconv-lite: 0.6.3
+ iconv-lite: 0.7.0
unpipe: 1.0.0
- rc@1.2.8:
- dependencies:
- deep-extend: 0.6.0
- ini: 1.3.8
- minimist: 1.2.8
- strip-json-comments: 2.0.1
- optional: true
-
- rdf-canonize@3.4.0:
+ rdf-canonize@5.0.0:
dependencies:
setimmediate: 1.0.5
- re2@1.22.1:
+ re2@1.22.3:
dependencies:
install-artifact-from-github: 1.4.0
- nan: 2.22.2
- node-gyp: 11.2.0
+ nan: 2.23.1
+ node-gyp: 11.5.0
transitivePeerDependencies:
- supports-color
@@ -19577,18 +19658,18 @@ snapshots:
dependencies:
typescript: 5.9.3
- react-docgen@8.0.1:
+ react-docgen@8.0.2:
dependencies:
- '@babel/core': 7.28.4
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/core': 7.28.5
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.28.0
'@types/doctrine': 0.0.9
'@types/resolve': 1.20.6
doctrine: 3.0.0
- resolve: 1.22.10
- strip-indent: 4.1.0
+ resolve: 1.22.11
+ strip-indent: 4.1.1
transitivePeerDependencies:
- supports-color
@@ -19599,7 +19680,7 @@ snapshots:
react-is@17.0.2: {}
- react-is@18.2.0: {}
+ react-is@18.3.1: {}
react@19.2.0: {}
@@ -19611,12 +19692,12 @@ snapshots:
read-pkg@5.2.0:
dependencies:
- '@types/normalize-package-data': 2.4.1
+ '@types/normalize-package-data': 2.4.4
normalize-package-data: 2.5.0
parse-json: 5.2.0
type-fest: 0.6.0
- readable-stream@2.3.7:
+ readable-stream@2.3.8:
dependencies:
core-util-is: 1.0.3
inherits: 2.0.4
@@ -19632,14 +19713,15 @@ snapshots:
string_decoder: 1.3.0
util-deprecate: 1.0.2
- readable-stream@4.3.0:
+ readable-stream@4.7.0:
dependencies:
abort-controller: 3.0.0
buffer: 6.0.3
events: 3.3.0
process: 0.11.10
+ string_decoder: 1.3.0
- readdir-glob@1.1.2:
+ readdir-glob@1.1.3:
dependencies:
minimatch: 5.1.6
@@ -19668,8 +19750,6 @@ snapshots:
dependencies:
lodash: 4.17.21
- redis-lock@0.1.4: {}
-
redis-parser@3.0.0:
dependencies:
redis-errors: 1.2.0
@@ -19689,8 +19769,6 @@ snapshots:
regenerator-runtime@0.13.11: {}
- regenerator-runtime@0.14.0: {}
-
regex-recursion@6.0.2:
dependencies:
regex-utilities: 2.3.0
@@ -19710,31 +19788,31 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
- remark-gfm@4.0.0:
+ remark-gfm@4.0.1:
dependencies:
- '@types/mdast': 4.0.3
- mdast-util-gfm: 3.0.0
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.1.0
micromark-extension-gfm: 3.0.0
remark-parse: 11.0.0
remark-stringify: 11.0.0
- unified: 11.0.4
+ unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-parse@11.0.0:
dependencies:
- '@types/mdast': 4.0.3
- mdast-util-from-markdown: 2.0.0
- micromark-util-types: 2.0.0
- unified: 11.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ micromark-util-types: 2.0.2
+ unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-stringify@11.0.0:
dependencies:
- '@types/mdast': 4.0.3
- mdast-util-to-markdown: 2.1.0
- unified: 11.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.2
+ unified: 11.0.5
rename@1.0.4:
dependencies:
@@ -19750,11 +19828,11 @@ snapshots:
require-from-string@2.0.2: {}
- require-in-the-middle@7.3.0:
+ require-in-the-middle@7.5.2:
dependencies:
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
module-details-from-path: 1.0.4
- resolve: 1.22.10
+ resolve: 1.22.11
transitivePeerDependencies:
- supports-color
@@ -19766,7 +19844,7 @@ snapshots:
resolve-pkg-maps@1.0.0: {}
- resolve@1.22.10:
+ resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
@@ -19791,7 +19869,7 @@ snapshots:
rettime@0.7.0: {}
- reusify@1.0.4: {}
+ reusify@1.1.0: {}
rfdc@1.4.1: {}
@@ -19805,35 +19883,43 @@ snapshots:
glob: 7.2.3
optional: true
- rollup@4.52.4:
+ rollup@4.53.3:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.52.4
- '@rollup/rollup-android-arm64': 4.52.4
- '@rollup/rollup-darwin-arm64': 4.52.4
- '@rollup/rollup-darwin-x64': 4.52.4
- '@rollup/rollup-freebsd-arm64': 4.52.4
- '@rollup/rollup-freebsd-x64': 4.52.4
- '@rollup/rollup-linux-arm-gnueabihf': 4.52.4
- '@rollup/rollup-linux-arm-musleabihf': 4.52.4
- '@rollup/rollup-linux-arm64-gnu': 4.52.4
- '@rollup/rollup-linux-arm64-musl': 4.52.4
- '@rollup/rollup-linux-loong64-gnu': 4.52.4
- '@rollup/rollup-linux-ppc64-gnu': 4.52.4
- '@rollup/rollup-linux-riscv64-gnu': 4.52.4
- '@rollup/rollup-linux-riscv64-musl': 4.52.4
- '@rollup/rollup-linux-s390x-gnu': 4.52.4
- '@rollup/rollup-linux-x64-gnu': 4.52.4
- '@rollup/rollup-linux-x64-musl': 4.52.4
- '@rollup/rollup-openharmony-arm64': 4.52.4
- '@rollup/rollup-win32-arm64-msvc': 4.52.4
- '@rollup/rollup-win32-ia32-msvc': 4.52.4
- '@rollup/rollup-win32-x64-gnu': 4.52.4
- '@rollup/rollup-win32-x64-msvc': 4.52.4
+ '@rollup/rollup-android-arm-eabi': 4.53.3
+ '@rollup/rollup-android-arm64': 4.53.3
+ '@rollup/rollup-darwin-arm64': 4.53.3
+ '@rollup/rollup-darwin-x64': 4.53.3
+ '@rollup/rollup-freebsd-arm64': 4.53.3
+ '@rollup/rollup-freebsd-x64': 4.53.3
+ '@rollup/rollup-linux-arm-gnueabihf': 4.53.3
+ '@rollup/rollup-linux-arm-musleabihf': 4.53.3
+ '@rollup/rollup-linux-arm64-gnu': 4.53.3
+ '@rollup/rollup-linux-arm64-musl': 4.53.3
+ '@rollup/rollup-linux-loong64-gnu': 4.53.3
+ '@rollup/rollup-linux-ppc64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-musl': 4.53.3
+ '@rollup/rollup-linux-s390x-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-musl': 4.53.3
+ '@rollup/rollup-openharmony-arm64': 4.53.3
+ '@rollup/rollup-win32-arm64-msvc': 4.53.3
+ '@rollup/rollup-win32-ia32-msvc': 4.53.3
+ '@rollup/rollup-win32-x64-gnu': 4.53.3
+ '@rollup/rollup-win32-x64-msvc': 4.53.3
fsevents: 2.3.3
- rrweb-cssom@0.8.0: {}
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.3(supports-color@10.2.2)
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.3.0
+ transitivePeerDependencies:
+ - supports-color
rss-parser@3.13.0:
dependencies:
@@ -19871,44 +19957,43 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
- safe-regex2@4.0.0:
+ safe-regex2@5.0.0:
dependencies:
ret: 0.5.0
- safe-stable-stringify@2.4.2: {}
+ safe-stable-stringify@2.5.0: {}
safer-buffer@2.1.2: {}
sanitize-html@2.17.0:
dependencies:
- deepmerge: 4.2.2
+ deepmerge: 4.3.1
escape-string-regexp: 4.0.0
- htmlparser2: 8.0.1
+ htmlparser2: 8.0.2
is-plain-object: 5.0.0
parse-srcset: 1.0.2
postcss: 8.5.6
- sass@1.93.2:
+ sass@1.94.2:
dependencies:
chokidar: 4.0.3
- immutable: 5.0.3
+ immutable: 5.1.4
source-map-js: 1.2.1
optionalDependencies:
- '@parcel/watcher': 2.5.0
+ '@parcel/watcher': 2.5.1
- sax@1.4.1: {}
+ sax@1.4.3: {}
saxes@6.0.0:
dependencies:
xmlchars: 2.2.0
+ optional: true
scheduler@0.27.0: {}
secure-json-parse@2.7.0: {}
- secure-json-parse@3.0.2: {}
-
- secure-json-parse@4.0.0: {}
+ secure-json-parse@4.1.0: {}
seedrandom@3.0.5: {}
@@ -19950,6 +20035,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ send@1.2.0:
+ dependencies:
+ debug: 4.4.3(supports-color@10.2.2)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ mime-types: 3.0.2
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
serve-static@1.16.2:
dependencies:
encodeurl: 2.0.0
@@ -19959,9 +20060,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ serve-static@2.2.0:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
set-blocking@2.0.0: {}
- set-cookie-parser@2.6.0: {}
+ set-cookie-parser@2.7.1: {}
set-function-length@1.2.2:
dependencies:
@@ -19998,7 +20108,7 @@ snapshots:
sharp@0.33.5:
dependencies:
color: 4.2.3
- detect-libc: 2.1.1
+ detect-libc: 2.1.2
semver: 7.7.3
optionalDependencies:
'@img/sharp-darwin-arm64': 0.33.5
@@ -20027,14 +20137,14 @@ snapshots:
shebang-regex@3.0.0: {}
- shiki@3.13.0:
+ shiki@3.15.0:
dependencies:
- '@shikijs/core': 3.13.0
- '@shikijs/engine-javascript': 3.13.0
- '@shikijs/engine-oniguruma': 3.13.0
- '@shikijs/langs': 3.13.0
- '@shikijs/themes': 3.13.0
- '@shikijs/types': 3.13.0
+ '@shikijs/core': 3.15.0
+ '@shikijs/engine-javascript': 3.15.0
+ '@shikijs/engine-oniguruma': 3.15.0
+ '@shikijs/langs': 3.15.0
+ '@shikijs/themes': 3.15.0
+ '@shikijs/types': 3.15.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -20074,28 +20184,18 @@ snapshots:
signal-exit@4.1.0: {}
- simple-concat@1.0.1:
- optional: true
-
- simple-get@4.0.1:
- dependencies:
- decompress-response: 6.0.0
- once: 1.4.0
- simple-concat: 1.0.1
- optional: true
-
simple-oauth2@5.1.0:
dependencies:
'@hapi/hoek': 11.0.7
- '@hapi/wreck': 18.0.1
- debug: 4.4.3(supports-color@10.2.0)
+ '@hapi/wreck': 18.1.0
+ debug: 4.4.3(supports-color@10.2.2)
joi: 17.13.3
transitivePeerDependencies:
- supports-color
- simple-swizzle@0.2.2:
+ simple-swizzle@0.2.4:
dependencies:
- is-arrayish: 0.3.2
+ is-arrayish: 0.3.4
simple-update-notifier@2.0.0:
dependencies:
@@ -20105,7 +20205,7 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
'@sinonjs/fake-timers': 11.2.2
- '@sinonjs/samsam': 8.0.0
+ '@sinonjs/samsam': 8.0.3
diff: 5.2.0
nise: 6.1.1
supports-color: 7.2.0
@@ -20185,18 +20285,18 @@ snapshots:
socks-proxy-agent@8.0.5:
dependencies:
- agent-base: 7.1.3
- debug: 4.4.3(supports-color@10.2.0)
- socks: 2.8.4
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@10.2.2)
+ socks: 2.8.7
transitivePeerDependencies:
- supports-color
- socks@2.8.4:
+ socks@2.8.7:
dependencies:
- ip-address: 9.0.5
+ ip-address: 10.0.1
smart-buffer: 4.2.0
- sonic-boom@4.0.1:
+ sonic-boom@4.2.0:
dependencies:
atomic-sleep: 1.0.0
@@ -20219,25 +20319,25 @@ snapshots:
source-map@0.6.1: {}
- source-map@0.7.4: {}
+ source-map@0.7.6: {}
space-separated-tokens@2.0.2: {}
- spdx-correct@3.1.1:
+ spdx-correct@3.2.0:
dependencies:
spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.12
+ spdx-license-ids: 3.0.22
- spdx-exceptions@2.3.0: {}
+ spdx-exceptions@2.5.0: {}
spdx-expression-parse@3.0.1:
dependencies:
- spdx-exceptions: 2.3.0
- spdx-license-ids: 3.0.12
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.22
- spdx-license-ids@3.0.12: {}
+ spdx-license-ids@3.0.22: {}
- split2@4.1.0: {}
+ split2@4.2.0: {}
split@0.3.3:
dependencies:
@@ -20247,7 +20347,7 @@ snapshots:
sprintf-js@1.1.3: {}
- sql-highlight@6.0.0: {}
+ sql-highlight@6.1.0: {}
sshpk@1.18.0:
dependencies:
@@ -20269,16 +20369,16 @@ snapshots:
standard-as-callback@2.1.0: {}
- start-server-and-test@2.1.2:
+ start-server-and-test@2.1.3:
dependencies:
arg: 5.0.2
bluebird: 3.7.2
check-more-types: 2.24.0
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
execa: 5.1.1
lazy-ass: 1.6.0
ps-tree: 1.2.0
- wait-on: 8.0.5(debug@4.4.3)
+ wait-on: 9.0.3(debug@4.4.3)
transitivePeerDependencies:
- supports-color
@@ -20286,37 +20386,36 @@ snapshots:
statuses@2.0.2: {}
- std-env@3.9.0: {}
+ std-env@3.10.0: {}
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
internal-slot: 1.1.0
- storybook-addon-misskey-theme@https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(eea6f1ff14bf28d064537fe27aa8f490):
+ storybook-addon-misskey-theme@https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(17b0cdbdd96b793834b84d8d4dddb88b):
dependencies:
- '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/components': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/core-events': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/manager-api': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/preview-api': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/theming': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
- '@storybook/types': 8.6.14(storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)))
+ '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/components': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/core-events': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/manager-api': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/preview-api': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/theming': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/types': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
optionalDependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- storybook@9.1.10(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(prettier@3.6.2)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)):
+ storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
dependencies:
'@storybook/global': 5.0.0
+ '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@testing-library/jest-dom': 6.9.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
+ '@vitest/mocker': 3.2.4(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
'@vitest/spy': 3.2.4
- better-opn: 3.0.2
- esbuild: 0.25.10
- esbuild-register: 3.6.0(esbuild@0.25.10)
+ esbuild: 0.25.11
recast: 0.23.11
semver: 7.7.3
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -20326,7 +20425,8 @@ snapshots:
- '@testing-library/dom'
- bufferutil
- msw
- - supports-color
+ - react
+ - react-dom
- utf-8-validate
- vite
@@ -20347,10 +20447,14 @@ snapshots:
streamsearch@1.1.0: {}
- streamx@2.15.0:
+ streamx@2.23.0:
dependencies:
- fast-fifo: 1.3.0
- queue-tick: 1.0.1
+ events-universal: 1.0.1
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.3
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
strict-event-emitter-types@2.0.0: {}
@@ -20370,6 +20474,12 @@ snapshots:
emoji-regex: 9.2.2
strip-ansi: 7.1.2
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
+
string.prototype.trim@1.2.10:
dependencies:
call-bind: 1.0.8
@@ -20435,34 +20545,19 @@ snapshots:
dependencies:
min-indent: 1.0.1
- strip-indent@4.1.0: {}
-
- strip-json-comments@2.0.1:
- optional: true
+ strip-indent@4.1.1: {}
strip-json-comments@3.1.1: {}
- strip-literal@3.0.0:
- dependencies:
- js-tokens: 9.0.1
-
- strnum@1.0.5: {}
-
strnum@2.1.1: {}
- strtok3@10.2.2:
+ strtok3@10.3.4:
dependencies:
'@tokenizer/token': 0.3.0
- peek-readable: 7.0.0
- strtok3@9.0.1:
+ stylehacks@7.0.6(postcss@8.5.6):
dependencies:
- '@tokenizer/token': 0.3.0
- peek-readable: 5.3.1
-
- stylehacks@7.0.5(postcss@8.5.6):
- dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
postcss: 8.5.6
postcss-selector-parser: 7.1.0
@@ -20470,9 +20565,9 @@ snapshots:
dependencies:
component-emitter: 1.3.1
cookiejar: 2.1.4
- debug: 4.4.3(supports-color@10.2.0)
+ debug: 4.4.3(supports-color@10.2.2)
fast-safe-stringify: 2.1.1
- form-data: 4.0.4
+ form-data: 4.0.5
formidable: 3.5.4
methods: 1.1.2
mime: 2.6.0
@@ -20487,7 +20582,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- supports-color@10.2.0: {}
+ supports-color@10.2.2: {}
supports-color@5.5.0:
dependencies:
@@ -20516,36 +20611,23 @@ snapshots:
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
- sax: 1.4.1
+ sax: 1.4.3
- symbol-tree@3.2.4: {}
+ symbol-tree@3.2.4:
+ optional: true
systeminformation@5.27.11: {}
systeminformation@5.27.7: {}
- tar-fs@2.1.4:
- dependencies:
- chownr: 1.1.4
- mkdirp-classic: 0.5.3
- pump: 3.0.3
- tar-stream: 2.2.0
- optional: true
-
- tar-stream@2.2.0:
- dependencies:
- bl: 4.1.0
- end-of-stream: 1.4.5
- fs-constants: 1.0.0
- inherits: 2.0.4
- readable-stream: 3.6.2
- optional: true
-
tar-stream@3.1.7:
dependencies:
- b4a: 1.6.4
- fast-fifo: 1.3.0
- streamx: 2.15.0
+ b4a: 1.7.3
+ fast-fifo: 1.3.2
+ streamx: 2.23.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
tar@6.2.1:
dependencies:
@@ -20557,7 +20639,7 @@ snapshots:
yallist: 4.0.0
optional: true
- tar@7.5.1:
+ tar@7.5.2:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
@@ -20569,34 +20651,26 @@ snapshots:
dependencies:
execa: 6.1.0
- terser@5.44.0:
+ terser@5.44.1:
dependencies:
- '@jridgewell/source-map': 0.3.6
+ '@jridgewell/source-map': 0.3.11
acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
- test-exclude@7.0.1:
+ text-decoder@1.2.3:
dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 10.4.5
- minimatch: 9.0.5
+ b4a: 1.7.3
+ transitivePeerDependencies:
+ - react-native-b4a
textarea-caret@3.1.0: {}
- thenify-all@1.6.0:
- dependencies:
- thenify: 3.3.1
-
- thenify@3.3.1:
- dependencies:
- any-promise: 1.3.0
-
thread-stream@3.1.0:
dependencies:
real-require: 0.2.0
- three@0.180.0: {}
+ three@0.181.2: {}
throttle-debounce@5.0.2: {}
@@ -20622,27 +20696,27 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tinypool@1.1.1: {}
-
tinyrainbow@1.2.0: {}
tinyrainbow@2.0.0: {}
+ tinyrainbow@3.0.3: {}
+
tinyspy@3.0.2: {}
tinyspy@4.0.4: {}
- tldts-core@6.1.61: {}
+ tldts-core@6.1.86: {}
- tldts-core@7.0.16: {}
+ tldts-core@7.0.18: {}
- tldts@6.1.61:
+ tldts@6.1.86:
dependencies:
- tldts-core: 6.1.61
+ tldts-core: 6.1.86
- tldts@7.0.16:
+ tldts@7.0.18:
dependencies:
- tldts-core: 7.0.16
+ tldts-core: 7.0.18
tmp@0.2.5: {}
@@ -20664,28 +20738,28 @@ snapshots:
token-stream@1.0.0: {}
- token-types@6.0.0:
+ token-types@6.1.1:
dependencies:
+ '@borewit/text-codec': 0.1.1
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
- touch@3.1.0:
- dependencies:
- nopt: 1.0.10
+ touch@3.1.1: {}
tough-cookie@5.1.2:
dependencies:
- tldts: 6.1.61
+ tldts: 6.1.86
tough-cookie@6.0.0:
dependencies:
- tldts: 7.0.16
+ tldts: 7.0.18
tr46@0.0.3: {}
- tr46@5.1.1:
+ tr46@6.0.0:
dependencies:
punycode: 2.3.1
+ optional: true
tree-kill@1.2.2: {}
@@ -20709,11 +20783,11 @@ snapshots:
dependencies:
chokidar: 4.0.3
commander: 9.5.0
- get-tsconfig: 4.10.1
+ get-tsconfig: 4.13.0
globby: 11.1.0
- mylas: 2.1.13
+ mylas: 2.1.14
normalize-path: 3.0.0
- plimit-lit: 1.5.0
+ plimit-lit: 1.6.1
tsconfig-paths@3.15.0:
dependencies:
@@ -20730,7 +20804,7 @@ snapshots:
tsd@0.33.0:
dependencies:
- '@tsd/typescript': 5.9.2
+ '@tsd/typescript': 5.9.3
eslint-formatter-pretty: 4.1.0
globby: 11.1.0
jest-diff: 29.7.0
@@ -20738,15 +20812,21 @@ snapshots:
path-exists: 4.0.0
read-pkg-up: 7.0.1
+ tslib@1.14.1: {}
+
tslib@2.8.1: {}
tsx@4.20.6:
dependencies:
- esbuild: 0.25.10
- get-tsconfig: 4.10.1
+ esbuild: 0.25.11
+ get-tsconfig: 4.13.0
optionalDependencies:
fsevents: 2.3.3
+ tsyringe@4.10.0:
+ dependencies:
+ tslib: 1.14.1
+
tunnel-agent@0.6.0:
dependencies:
safe-buffer: 5.2.1
@@ -20759,6 +20839,8 @@ snapshots:
type-detect@4.0.8: {}
+ type-detect@4.1.0: {}
+
type-fest@0.18.1: {}
type-fest@0.21.3: {}
@@ -20776,6 +20858,12 @@ snapshots:
media-typer: 0.3.0
mime-types: 2.1.35
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.2
+
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -20806,30 +20894,30 @@ snapshots:
for-each: 0.3.5
gopd: 1.2.0
is-typed-array: 1.1.15
- possible-typed-array-names: 1.0.0
+ possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
typedarray@0.0.6: {}
- typeorm@0.3.27(ioredis@5.8.1)(pg@8.16.3)(reflect-metadata@0.2.2):
+ typeorm@0.3.27(ioredis@5.8.2)(pg@8.16.3)(reflect-metadata@0.2.2):
dependencies:
'@sqltools/formatter': 1.2.5
ansis: 3.17.0
app-root-path: 3.1.0
buffer: 6.0.3
- dayjs: 1.11.18
- debug: 4.4.3(supports-color@10.2.0)
- dedent: 1.6.0
- dotenv: 16.4.7
- glob: 10.4.5
+ dayjs: 1.11.19
+ debug: 4.4.3(supports-color@10.2.2)
+ dedent: 1.7.0
+ dotenv: 16.6.1
+ glob: 10.5.0
reflect-metadata: 0.2.2
sha.js: 2.4.12
- sql-highlight: 6.0.0
+ sql-highlight: 6.1.0
tslib: 2.8.1
uuid: 11.1.0
yargs: 17.7.2
optionalDependencies:
- ioredis: 5.8.1
+ ioredis: 5.8.2
pg: 8.16.3
transitivePeerDependencies:
- babel-plugin-macros
@@ -20843,16 +20931,16 @@ snapshots:
uid@2.0.2:
dependencies:
- '@lukeed/csprng': 1.0.1
+ '@lukeed/csprng': 1.1.0
- uint8array-extras@1.4.0: {}
+ uint8array-extras@1.5.0: {}
- ulid@2.4.0: {}
+ ulid@3.0.1: {}
unbox-primitive@1.1.0:
dependencies:
call-bound: 1.0.4
- has-bigints: 1.0.2
+ has-bigints: 1.1.0
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
@@ -20865,27 +20953,23 @@ snapshots:
undici-types@6.21.0: {}
- undici@5.28.5:
- dependencies:
- '@fastify/busboy': 2.1.0
+ undici-types@7.16.0: {}
- undici@6.19.8: {}
+ undici@6.22.0: {}
undici@7.16.0: {}
- unicorn-magic@0.1.0: {}
-
unicorn-magic@0.3.0: {}
- unified@11.0.4:
+ unified@11.0.5:
dependencies:
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
bail: 2.0.2
devlop: 1.1.0
extend: 3.0.2
is-plain-obj: 4.1.0
trough: 2.2.0
- vfile: 6.0.1
+ vfile: 6.0.3
unique-filename@4.0.0:
dependencies:
@@ -20895,28 +20979,28 @@ snapshots:
dependencies:
imurmurhash: 0.1.4
- unist-util-is@6.0.0:
+ unist-util-is@6.0.1:
dependencies:
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
unist-util-position@5.0.0:
dependencies:
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
unist-util-stringify-position@4.0.0:
dependencies:
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
- unist-util-visit-parents@6.0.1:
+ unist-util-visit-parents@6.0.2:
dependencies:
- '@types/unist': 3.0.2
- unist-util-is: 6.0.0
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
unist-util-visit@5.0.0:
dependencies:
- '@types/unist': 3.0.2
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
universalify@0.1.2: {}
@@ -20926,10 +21010,10 @@ snapshots:
unpipe@1.0.0: {}
- unplugin-swc@1.5.8(@swc/core@1.13.5)(rollup@4.52.4):
+ unplugin-swc@1.5.8(@swc/core@1.15.3)(rollup@4.53.3):
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.52.4)
- '@swc/core': 1.13.5
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.3)
+ '@swc/core': 1.15.3
load-tsconfig: 0.2.5
unplugin: 2.3.10
transitivePeerDependencies:
@@ -20951,21 +21035,19 @@ snapshots:
untildify@4.0.0: {}
- update-browserslist-db@1.1.3(browserslist@4.26.3):
+ update-browserslist-db@1.1.4(browserslist@4.28.0):
dependencies:
- browserslist: 4.26.3
+ browserslist: 4.28.0
escalade: 3.2.0
picocolors: 1.1.1
- uri-js-replace@1.0.1: {}
-
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
utf-8-validate@6.0.5:
dependencies:
- node-gyp-build: 4.6.0
+ node-gyp-build: 4.8.4
optional: true
util-deprecate@1.0.2: {}
@@ -20980,19 +21062,19 @@ snapshots:
uuid@9.0.1: {}
- v-code-diff@1.13.1(vue@3.5.22(typescript@5.9.3)):
+ v-code-diff@1.13.1(vue@3.5.24(typescript@5.9.3)):
dependencies:
diff: 5.2.0
diff-match-patch: 1.0.5
- highlight.js: 11.10.0
- vue: 3.5.22(typescript@5.9.3)
- vue-demi: 0.14.7(vue@3.5.22(typescript@5.9.3))
+ highlight.js: 11.11.1
+ vue: 3.5.24(typescript@5.9.3)
+ vue-demi: 0.14.10(vue@3.5.24(typescript@5.9.3))
valid-data-url@3.0.1: {}
validate-npm-package-license@3.0.4:
dependencies:
- spdx-correct: 3.1.1
+ spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
vary@1.1.2: {}
@@ -21003,102 +21085,78 @@ snapshots:
core-util-is: 1.0.2
extsprintf: 1.3.0
- vfile-message@4.0.2:
+ vfile-message@4.0.3:
dependencies:
- '@types/unist': 3.0.2
+ '@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
- vfile@6.0.1:
+ vfile@6.0.3:
dependencies:
- '@types/unist': 3.0.2
- unist-util-stringify-position: 4.0.0
- vfile-message: 4.0.2
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
- vite-node@3.2.4(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6):
+ vite-plugin-glsl@1.5.4(@rollup/pluginutils@5.3.0(rollup@4.53.3))(esbuild@0.27.0)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
dependencies:
- cac: 6.7.14
- debug: 4.4.3(supports-color@10.2.0)
- es-module-lexer: 1.7.0
- pathe: 2.0.3
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
- transitivePeerDependencies:
- - '@types/node'
- - jiti
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - yaml
-
- vite-plugin-glsl@1.5.4(@rollup/pluginutils@5.3.0(rollup@4.52.4))(esbuild@0.25.10)(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)):
- dependencies:
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
optionalDependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.52.4)
- esbuild: 0.25.10
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.3)
+ esbuild: 0.27.0
vite-plugin-turbosnap@1.0.3: {}
- vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6):
+ vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6):
dependencies:
- esbuild: 0.25.10
+ esbuild: 0.25.11
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.52.4
+ rollup: 4.53.3
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 22.18.10
+ '@types/node': 24.10.1
fsevents: 2.3.3
- sass: 1.93.2
- terser: 5.44.0
+ sass: 1.94.2
+ terser: 5.44.1
tsx: 4.20.6
- vitest-fetch-mock@0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)):
+ vitest-fetch-mock@0.4.5(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
dependencies:
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
- vitest-websocket-mock@0.5.0(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)):
+ vitest-websocket-mock@0.5.0(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
dependencies:
'@vitest/utils': 3.2.4
mock-socket: 9.3.1
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(happy-dom@20.0.7)(jsdom@26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5))(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6):
+ vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6):
dependencies:
- '@types/chai': 5.2.2
- '@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.11.5(@types/node@22.18.10)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6))
- '@vitest/pretty-format': 3.2.4
- '@vitest/runner': 3.2.4
- '@vitest/snapshot': 3.2.4
- '@vitest/spy': 3.2.4
- '@vitest/utils': 3.2.4
- chai: 5.3.3
- debug: 4.4.3(supports-color@10.2.0)
- expect-type: 1.2.1
- magic-string: 0.30.19
+ '@vitest/expect': 4.0.13
+ '@vitest/mocker': 4.0.13(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@vitest/pretty-format': 4.0.13
+ '@vitest/runner': 4.0.13
+ '@vitest/snapshot': 4.0.13
+ '@vitest/spy': 4.0.13
+ '@vitest/utils': 4.0.13
+ debug: 4.4.3(supports-color@10.2.2)
+ es-module-lexer: 1.7.0
+ expect-type: 1.2.2
+ magic-string: 0.30.21
pathe: 2.0.3
picomatch: 4.0.3
- std-env: 3.9.0
+ std-env: 3.10.0
tinybench: 2.9.0
tinyexec: 0.3.2
tinyglobby: 0.2.15
- tinypool: 1.1.1
- tinyrainbow: 2.0.0
- vite: 7.1.9(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
- vite-node: 3.2.4(@types/node@22.18.10)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)
+ tinyrainbow: 3.0.3
+ vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
why-is-node-running: 2.3.0
optionalDependencies:
+ '@opentelemetry/api': 1.9.0
'@types/debug': 4.1.12
- '@types/node': 22.18.10
- happy-dom: 20.0.7
- jsdom: 26.1.0(bufferutil@4.0.9)(canvas@3.1.0)(utf-8-validate@6.0.5)
+ '@types/node': 24.10.1
+ happy-dom: 20.0.10
+ jsdom: 27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- jiti
- less
@@ -21141,22 +21199,20 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- vue-component-type-helpers@1.8.4: {}
-
vue-component-type-helpers@2.2.12: {}
- vue-component-type-helpers@3.1.1: {}
+ vue-component-type-helpers@3.1.5: {}
- vue-demi@0.14.7(vue@3.5.22(typescript@5.9.3)):
+ vue-demi@0.14.10(vue@3.5.24(typescript@5.9.3)):
dependencies:
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.24(typescript@5.9.3)
- vue-docgen-api@4.79.2(vue@3.5.22(typescript@5.9.3)):
+ vue-docgen-api@4.79.2(vue@3.5.24(typescript@5.9.3)):
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-sfc': 3.5.22
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-sfc': 3.5.24
ast-types: 0.16.1
esm-resolve: 1.0.11
hash-sum: 2.0.0
@@ -21164,13 +21220,13 @@ snapshots:
pug: 3.0.3
recast: 0.23.11
ts-map: 1.0.3
- vue: 3.5.22(typescript@5.9.3)
- vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.22(typescript@5.9.3))
+ vue: 3.5.24(typescript@5.9.3)
+ vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.24(typescript@5.9.3))
- vue-eslint-parser@10.2.0(eslint@9.37.0):
+ vue-eslint-parser@10.2.0(eslint@9.39.1):
dependencies:
- debug: 4.4.3(supports-color@10.2.0)
- eslint: 9.37.0
+ debug: 4.4.3(supports-color@10.2.2)
+ eslint: 9.39.1
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -21179,38 +21235,39 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.22(typescript@5.9.3)):
+ vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.24(typescript@5.9.3)):
dependencies:
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.24(typescript@5.9.3)
- vue-tsc@3.1.1(typescript@5.9.3):
+ vue-tsc@3.1.5(typescript@5.9.3):
dependencies:
'@volar/typescript': 2.4.23
- '@vue/language-core': 3.1.1(typescript@5.9.3)
+ '@vue/language-core': 3.1.5(typescript@5.9.3)
typescript: 5.9.3
- vue@3.5.22(typescript@5.9.3):
+ vue@3.5.24(typescript@5.9.3):
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-sfc': 3.5.22
- '@vue/runtime-dom': 3.5.22
- '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.3))
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-sfc': 3.5.24
+ '@vue/runtime-dom': 3.5.24
+ '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.9.3))
+ '@vue/shared': 3.5.24
optionalDependencies:
typescript: 5.9.3
- vuedraggable@4.1.0(vue@3.5.22(typescript@5.9.3)):
+ vuedraggable@4.1.0(vue@3.5.24(typescript@5.9.3)):
dependencies:
sortablejs: 1.14.0
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.24(typescript@5.9.3)
w3c-xmlserializer@5.0.0:
dependencies:
xml-name-validator: 5.0.0
+ optional: true
- wait-on@8.0.5(debug@4.4.3):
+ wait-on@9.0.3(debug@4.4.3):
dependencies:
- axios: 1.12.2(debug@4.4.3)
+ axios: 1.13.2(debug@4.4.3)
joi: 18.0.1
lodash: 4.17.21
minimist: 1.2.8
@@ -21228,7 +21285,7 @@ snapshots:
dependencies:
asn1.js: 5.4.1
http_ece: 1.2.0
- https-proxy-agent: 7.0.6(supports-color@10.2.0)
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
jws: 4.0.0
minimist: 1.2.8
transitivePeerDependencies:
@@ -21242,14 +21299,12 @@ snapshots:
mime: 2.6.0
valid-data-url: 3.0.1
- web-streams-polyfill@3.2.1: {}
-
- web-streams-polyfill@4.0.0:
- optional: true
+ web-streams-polyfill@3.3.3: {}
webidl-conversions@3.0.1: {}
- webidl-conversions@7.0.0: {}
+ webidl-conversions@8.0.0:
+ optional: true
webpack-virtual-modules@0.6.2: {}
@@ -21261,10 +21316,11 @@ snapshots:
whatwg-mimetype@4.0.0: {}
- whatwg-url@14.2.0:
+ whatwg-url@15.1.0:
dependencies:
- tr46: 5.1.1
- webidl-conversions: 7.0.0
+ tr46: 6.0.0
+ webidl-conversions: 8.0.0
+ optional: true
whatwg-url@5.0.0:
dependencies:
@@ -21287,7 +21343,7 @@ snapshots:
is-async-function: 2.1.1
is-date-object: 1.1.0
is-finalizationregistry: 1.1.1
- is-generator-function: 1.0.10
+ is-generator-function: 1.1.2
is-regex: 1.2.1
is-weakref: 1.1.1
isarray: 2.0.5
@@ -21302,7 +21358,7 @@ snapshots:
is-weakmap: 2.0.2
is-weakset: 2.0.4
- which-module@2.0.0: {}
+ which-module@2.0.1: {}
which-typed-array@1.1.19:
dependencies:
@@ -21338,9 +21394,9 @@ snapshots:
with@7.0.2:
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- assert-never: 1.2.1
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ assert-never: 1.4.0
babel-walk: 3.0.0-canary-5
word-wrap@1.2.5: {}
@@ -21359,10 +21415,16 @@ snapshots:
wrap-ansi@8.1.0:
dependencies:
- ansi-styles: 6.2.1
+ ansi-styles: 6.2.3
string-width: 5.1.2
strip-ansi: 7.1.2
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
wrappy@1.0.2: {}
ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5):
@@ -21374,20 +21436,22 @@ snapshots:
xml-js@1.6.11:
dependencies:
- sax: 1.4.1
+ sax: 1.4.3
xml-name-validator@4.0.0: {}
- xml-name-validator@5.0.0: {}
+ xml-name-validator@5.0.0:
+ optional: true
xml2js@0.5.0:
dependencies:
- sax: 1.4.1
+ sax: 1.4.3
xmlbuilder: 11.0.1
xmlbuilder@11.0.1: {}
- xmlchars@2.2.0: {}
+ xmlchars@2.2.0:
+ optional: true
xtend@4.0.2: {}
@@ -21412,6 +21476,8 @@ snapshots:
yargs-parser@21.1.1: {}
+ yargs-parser@22.0.0: {}
+
yargs@15.4.1:
dependencies:
cliui: 6.0.0
@@ -21422,7 +21488,7 @@ snapshots:
require-main-filename: 2.0.0
set-blocking: 2.0.0
string-width: 4.2.3
- which-module: 2.0.0
+ which-module: 2.0.1
y18n: 4.0.3
yargs-parser: 18.1.3
@@ -21446,6 +21512,15 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yargs@18.0.0:
+ dependencies:
+ cliui: 9.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ string-width: 7.2.0
+ y18n: 5.0.8
+ yargs-parser: 22.0.0
+
yauzl@2.10.0:
dependencies:
buffer-crc32: 0.2.13
@@ -21458,16 +21533,14 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-queue@1.2.1: {}
-
yoctocolors-cjs@2.1.3: {}
- yoctocolors@2.1.1: {}
+ yoctocolors@2.1.2: {}
zip-stream@6.0.1:
dependencies:
archiver-utils: 5.0.2
compress-commons: 6.0.2
- readable-stream: 4.3.0
+ readable-stream: 4.7.0
zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 23fb2e6125..9d43518ff6 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -4,6 +4,7 @@ packages:
- packages/frontend
- packages/frontend-builder
- packages/frontend-embed
+ - packages/i18n
- packages/icons-subsetter
- packages/sw
- packages/misskey-js
@@ -14,6 +15,7 @@ onlyBuiltDependencies:
- '@nestjs/core'
- '@parcel/watcher'
- '@sentry/profiling-node'
+ - '@sentry-internal/node-cpu-profiler'
- '@swc/core'
- '@tensorflow/tfjs-node'
- bufferutil
@@ -32,4 +34,4 @@ onlyBuiltDependencies:
ignorePatchFailures: false
minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack
minimumReleaseAgeExclude:
- - happy-dom # セキュリティ修正のため一時的に。そのうち消すこと
+ - '@syuilo/aiscript'
diff --git a/renovate.json5 b/renovate.json5
index 0ada26d579..0b0f9e1ac9 100644
--- a/renovate.json5
+++ b/renovate.json5
@@ -106,6 +106,18 @@
'.devcontainer/**',
],
},
+ {
+ // devcontainer (Dockerfile用の設定)
+ groupName: '[devcontainer] Update dependencies',
+ matchFileNames: ['.devcontainer/Dockerfile'],
+ matchDepNames: ['mcr.microsoft.com/devcontainers/javascript-node'],
+ allowedVersions: '/-[0-9]+-trixie$/',
+
+ // major/minor/patch: devcontainer の semver
+ // build: Node メジャー
+ // dist: Debian codename (e.g., bullseye, bookworm)(比較には使わない)
+ versioning: 'regex:^(?\\d+)\\.(?\\d+)\\.(?\\d+)-(?\\d+)-(?.+)$',
+ },
],
customManagers: [
{
diff --git a/scripts/build-assets.mjs b/scripts/build-assets.mjs
index e610a72380..0cfce02fef 100644
--- a/scripts/build-assets.mjs
+++ b/scripts/build-assets.mjs
@@ -6,14 +6,7 @@
import * as fs from 'node:fs/promises';
import * as path from 'node:path';
import { fileURLToPath } from 'node:url';
-import cssnano from 'cssnano';
import * as yaml from 'js-yaml';
-import postcss from 'postcss';
-import * as terser from 'terser';
-
-import { build as buildLocales } from '../locales/index.js';
-import generateDTS from '../locales/generateDTS.js';
-import meta from '../package.json' with { type: "json" };
import buildTarball from './tarball.mjs';
const configDir = fileURLToPath(new URL('../.config', import.meta.url));
@@ -23,86 +16,19 @@ const configPath = process.env.MISSKEY_CONFIG_YML
? path.resolve(configDir, 'test.yml')
: path.resolve(configDir, 'default.yml');
-let locales = buildLocales();
-
async function loadConfig() {
return fs.readFile(configPath, 'utf-8').then(data => yaml.load(data)).catch(() => null);
}
async function copyFrontendFonts() {
- await fs.cp('./packages/frontend/node_modules/three/examples/fonts', './built/_frontend_dist_/fonts', { dereference: true, recursive: true });
-}
-
-async function copyFrontendLocales() {
- generateDTS();
-
- await fs.mkdir('./built/_frontend_dist_/locales', { recursive: true });
-
- const v = { '_version_': meta.version };
-
- for (const [lang, locale] of Object.entries(locales)) {
- await fs.writeFile(`./built/_frontend_dist_/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8');
- }
-}
-
-async function copyBackendViews() {
- await fs.cp('./packages/backend/src/server/web/views', './packages/backend/built/server/web/views', { recursive: true });
-}
-
-async function buildBackendScript() {
- await fs.mkdir('./packages/backend/built/server/web', { recursive: true });
-
- for (const file of [
- './packages/backend/src/server/web/boot.js',
- './packages/backend/src/server/web/boot.embed.js',
- './packages/backend/src/server/web/bios.js',
- './packages/backend/src/server/web/cli.js',
- './packages/backend/src/server/web/error.js',
- ]) {
- let source = await fs.readFile(file, { encoding: 'utf-8' });
- source = source.replaceAll('LANGS', JSON.stringify(Object.keys(locales)));
- const { code } = await terser.minify(source, { toplevel: true });
- await fs.writeFile(`./packages/backend/built/server/web/${path.basename(file)}`, code);
- }
-}
-
-async function buildBackendStyle() {
- await fs.mkdir('./packages/backend/built/server/web', { recursive: true });
-
- for (const file of [
- './packages/backend/src/server/web/style.css',
- './packages/backend/src/server/web/style.embed.css',
- './packages/backend/src/server/web/bios.css',
- './packages/backend/src/server/web/cli.css',
- './packages/backend/src/server/web/error.css'
- ]) {
- const source = await fs.readFile(file, { encoding: 'utf-8' });
- const { css } = await postcss([cssnano({ zindex: false })]).process(source, { from: undefined });
- await fs.writeFile(`./packages/backend/built/server/web/${path.basename(file)}`, css);
- }
+ await fs.cp('./packages/frontend/node_modules/three/examples/fonts', './built/_frontend_dist_/fonts', { dereference: true, recursive: true });
}
async function build() {
- await Promise.all([
- copyFrontendFonts(),
- copyFrontendLocales(),
- copyBackendViews(),
- buildBackendScript(),
- buildBackendStyle(),
+ await Promise.all([
+ copyFrontendFonts(),
loadConfig().then(config => config?.publishTarballInsteadOfProvideRepositoryUrl && buildTarball()),
- ]);
+ ]);
}
await build();
-
-if (process.argv.includes('--watch')) {
- const watcher = fs.watch('./locales');
- for await (const event of watcher) {
- const filename = event.filename?.replaceAll('\\', '/');
- if (/^[a-z]+-[A-Z]+\.yml/.test(filename)) {
- console.log(`update ${filename} ...`)
- locales = buildLocales();
- await copyFrontendLocales()
- }
- }
-}
diff --git a/scripts/changelog-checker/package-lock.json b/scripts/changelog-checker/package-lock.json
index 474cbb523e..3bf65e528a 100644
--- a/scripts/changelog-checker/package-lock.json
+++ b/scripts/changelog-checker/package-lock.json
@@ -9,36 +9,22 @@
"version": "1.0.0",
"devDependencies": {
"@types/mdast": "4.0.4",
- "@types/node": "22.18.10",
- "@vitest/coverage-v8": "3.2.4",
+ "@types/node": "24.10.1",
+ "@vitest/coverage-v8": "4.0.13",
"mdast-util-to-string": "4.0.0",
"remark": "15.0.1",
"remark-parse": "11.0.0",
"typescript": "5.9.3",
"unified": "11.0.5",
- "vite": "6.3.6",
- "vite-node": "3.2.4",
- "vitest": "3.2.4"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
+ "vite": "7.2.4",
+ "vite-node": "5.2.0",
+ "vitest": "4.0.13"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -46,9 +32,9 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -56,13 +42,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
- "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
+ "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.9"
+ "@babel/types": "^7.28.5"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -72,14 +58,14 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
- "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
+ "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -520,48 +506,6 @@
"node": ">=18"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
@@ -571,27 +515,17 @@
"node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -599,21 +533,10 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz",
- "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
+ "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
"cpu": [
"arm"
],
@@ -625,9 +548,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz",
- "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
+ "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
"cpu": [
"arm64"
],
@@ -639,9 +562,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz",
- "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
+ "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
"cpu": [
"arm64"
],
@@ -653,9 +576,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz",
- "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
+ "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
"cpu": [
"x64"
],
@@ -667,9 +590,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz",
- "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
+ "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
"cpu": [
"arm64"
],
@@ -681,9 +604,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz",
- "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
+ "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
"cpu": [
"x64"
],
@@ -695,9 +618,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz",
- "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
+ "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
"cpu": [
"arm"
],
@@ -709,9 +632,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz",
- "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
+ "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
"cpu": [
"arm"
],
@@ -723,9 +646,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz",
- "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
+ "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
"cpu": [
"arm64"
],
@@ -737,9 +660,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz",
- "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
+ "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
"cpu": [
"arm64"
],
@@ -750,10 +673,10 @@
"linux"
]
},
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz",
- "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==",
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
+ "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
"cpu": [
"loong64"
],
@@ -764,10 +687,10 @@
"linux"
]
},
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz",
- "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==",
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
+ "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
"cpu": [
"ppc64"
],
@@ -779,9 +702,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz",
- "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
+ "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
"cpu": [
"riscv64"
],
@@ -793,9 +716,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz",
- "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
+ "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
"cpu": [
"riscv64"
],
@@ -807,9 +730,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz",
- "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
+ "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
"cpu": [
"s390x"
],
@@ -821,9 +744,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz",
- "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
"cpu": [
"x64"
],
@@ -835,9 +758,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz",
- "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
+ "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
"cpu": [
"x64"
],
@@ -848,10 +771,24 @@
"linux"
]
},
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
+ "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz",
- "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
+ "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
"cpu": [
"arm64"
],
@@ -863,9 +800,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz",
- "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
+ "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
"cpu": [
"ia32"
],
@@ -876,10 +813,10 @@
"win32"
]
},
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz",
- "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==",
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
"cpu": [
"x64"
],
@@ -890,6 +827,27 @@
"win32"
]
},
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
+ "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@standard-schema/spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+ "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/chai": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
@@ -917,9 +875,9 @@
"license": "MIT"
},
"node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true,
"license": "MIT"
},
@@ -940,14 +898,14 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "22.18.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.10.tgz",
- "integrity": "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==",
+ "version": "24.10.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
+ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "undici-types": "~6.21.0"
+ "undici-types": "~7.16.0"
}
},
"node_modules/@types/unist": {
@@ -957,32 +915,30 @@
"dev": true
},
"node_modules/@vitest/coverage-v8": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz",
- "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.13.tgz",
+ "integrity": "sha512-w77N6bmtJ3CFnL/YHiYotwW/JI3oDlR3K38WEIqegRfdMSScaYxwYKB/0jSNpOTZzUjQkG8HHEz4sdWQMWpQ5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@ampproject/remapping": "^2.3.0",
"@bcoe/v8-coverage": "^1.0.2",
- "ast-v8-to-istanbul": "^0.3.3",
- "debug": "^4.4.1",
+ "@vitest/utils": "4.0.13",
+ "ast-v8-to-istanbul": "^0.3.8",
+ "debug": "^4.4.3",
"istanbul-lib-coverage": "^3.2.2",
"istanbul-lib-report": "^3.0.1",
"istanbul-lib-source-maps": "^5.0.6",
- "istanbul-reports": "^3.1.7",
- "magic-string": "^0.30.17",
- "magicast": "^0.3.5",
- "std-env": "^3.9.0",
- "test-exclude": "^7.0.1",
- "tinyrainbow": "^2.0.0"
+ "istanbul-reports": "^3.2.0",
+ "magicast": "^0.5.1",
+ "std-env": "^3.10.0",
+ "tinyrainbow": "^3.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "3.2.4",
- "vitest": "3.2.4"
+ "@vitest/browser": "4.0.13",
+ "vitest": "4.0.13"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -991,39 +947,40 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
- "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.13.tgz",
+ "integrity": "sha512-zYtcnNIBm6yS7Gpr7nFTmq8ncowlMdOJkWLqYvhr/zweY6tFbDkDi8BPPOeHxEtK1rSI69H7Fd4+1sqvEGli6w==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@standard-schema/spec": "^1.0.0",
"@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.4",
- "@vitest/utils": "3.2.4",
- "chai": "^5.2.0",
- "tinyrainbow": "^2.0.0"
+ "@vitest/spy": "4.0.13",
+ "@vitest/utils": "4.0.13",
+ "chai": "^6.2.1",
+ "tinyrainbow": "^3.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/mocker": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
- "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.13.tgz",
+ "integrity": "sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.2.4",
+ "@vitest/spy": "4.0.13",
"estree-walker": "^3.0.3",
- "magic-string": "^0.30.17"
+ "magic-string": "^0.30.21"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"msw": "^2.4.9",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ "vite": "^6.0.0 || ^7.0.0-0"
},
"peerDependenciesMeta": {
"msw": {
@@ -1035,42 +992,41 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
- "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.13.tgz",
+ "integrity": "sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tinyrainbow": "^2.0.0"
+ "tinyrainbow": "^3.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/runner": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
- "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.13.tgz",
+ "integrity": "sha512-9IKlAru58wcVaWy7hz6qWPb2QzJTKt+IOVKjAx5vb5rzEFPTL6H4/R9BMvjZ2ppkxKgTrFONEJFtzvnyEpiT+A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.4",
- "pathe": "^2.0.3",
- "strip-literal": "^3.0.0"
+ "@vitest/utils": "4.0.13",
+ "pathe": "^2.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
- "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.13.tgz",
+ "integrity": "sha512-hb7Usvyika1huG6G6l191qu1urNPsq1iFc2hmdzQY3F5/rTgqQnwwplyf8zoYHkpt7H6rw5UfIw6i/3qf9oSxQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.4",
- "magic-string": "^0.30.17",
+ "@vitest/pretty-format": "4.0.13",
+ "magic-string": "^0.30.21",
"pathe": "^2.0.3"
},
"funding": {
@@ -1078,77 +1034,37 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
- "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.13.tgz",
+ "integrity": "sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "tinyspy": "^4.0.3"
- },
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/utils": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
- "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.13.tgz",
+ "integrity": "sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.4",
- "loupe": "^3.1.4",
- "tinyrainbow": "^2.0.0"
+ "@vitest/pretty-format": "4.0.13",
+ "tinyrainbow": "^3.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
- "node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/assertion-error": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
- "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/ast-v8-to-istanbul": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.3.tgz",
- "integrity": "sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz",
+ "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.25",
+ "@jridgewell/trace-mapping": "^0.3.31",
"estree-walker": "^3.0.3",
"js-tokens": "^9.0.1"
}
@@ -1163,23 +1079,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
"node_modules/cac": {
"version": "6.7.14",
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -1190,20 +1089,13 @@
}
},
"node_modules/chai": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
- "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz",
+ "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "assertion-error": "^2.0.1",
- "check-error": "^2.1.1",
- "deep-eql": "^5.0.1",
- "loupe": "^3.1.0",
- "pathval": "^2.0.0"
- },
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/character-entities": {
@@ -1216,54 +1108,10 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/check-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
- "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 16"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1291,16 +1139,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/deep-eql": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
- "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -1323,20 +1161,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/es-module-lexer": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
@@ -1396,9 +1220,9 @@
}
},
"node_modules/expect-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz",
- "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
+ "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1412,11 +1236,14 @@
"dev": true
},
"node_modules/fdir": {
- "version": "6.4.4",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
- "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
"peerDependencies": {
"picomatch": "^3 || ^4"
},
@@ -1426,23 +1253,6 @@
}
}
},
- "node_modules/foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -1458,27 +1268,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -1494,16 +1283,6 @@
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-plain-obj": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -1516,12 +1295,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
@@ -1561,9 +1334,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
- "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -1574,22 +1347,6 @@
"node": ">=8"
}
},
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/js-tokens": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
@@ -1607,13 +1364,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/loupe": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz",
- "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -1627,25 +1377,25 @@
}
},
"node_modules/magic-string": {
- "version": "0.30.17",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
- "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0"
+ "@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"node_modules/magicast": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
- "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz",
+ "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.4",
- "@babel/types": "^7.25.4",
- "source-map-js": "^1.2.0"
+ "@babel/parser": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "source-map-js": "^1.2.1"
}
},
"node_modules/make-dir": {
@@ -2176,32 +1926,6 @@
}
]
},
- "node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -2210,9 +1934,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
- "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"funding": [
{
@@ -2228,45 +1952,16 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "node_modules/obug": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
+ "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==",
"dev": true,
- "license": "BlueOak-1.0.0"
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT"
},
"node_modules/pathe": {
"version": "2.0.3",
@@ -2275,16 +1970,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/pathval": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
- "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.16"
- }
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -2293,9 +1978,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -2307,9 +1992,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.3",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
- "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [
{
@@ -2327,7 +2012,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.8",
+ "nanoid": "^3.3.11",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -2383,13 +2068,13 @@
}
},
"node_modules/rollup": {
- "version": "4.40.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz",
- "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
+ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.7"
+ "@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -2399,26 +2084,28 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.40.0",
- "@rollup/rollup-android-arm64": "4.40.0",
- "@rollup/rollup-darwin-arm64": "4.40.0",
- "@rollup/rollup-darwin-x64": "4.40.0",
- "@rollup/rollup-freebsd-arm64": "4.40.0",
- "@rollup/rollup-freebsd-x64": "4.40.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.40.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.40.0",
- "@rollup/rollup-linux-arm64-gnu": "4.40.0",
- "@rollup/rollup-linux-arm64-musl": "4.40.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.40.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.40.0",
- "@rollup/rollup-linux-riscv64-musl": "4.40.0",
- "@rollup/rollup-linux-s390x-gnu": "4.40.0",
- "@rollup/rollup-linux-x64-gnu": "4.40.0",
- "@rollup/rollup-linux-x64-musl": "4.40.0",
- "@rollup/rollup-win32-arm64-msvc": "4.40.0",
- "@rollup/rollup-win32-ia32-msvc": "4.40.0",
- "@rollup/rollup-win32-x64-msvc": "4.40.0",
+ "@rollup/rollup-android-arm-eabi": "4.53.3",
+ "@rollup/rollup-android-arm64": "4.53.3",
+ "@rollup/rollup-darwin-arm64": "4.53.3",
+ "@rollup/rollup-darwin-x64": "4.53.3",
+ "@rollup/rollup-freebsd-arm64": "4.53.3",
+ "@rollup/rollup-freebsd-x64": "4.53.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.53.3",
+ "@rollup/rollup-linux-arm64-musl": "4.53.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.53.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.53.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-musl": "4.53.3",
+ "@rollup/rollup-openharmony-arm64": "4.53.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.53.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.53.3",
+ "@rollup/rollup-win32-x64-gnu": "4.53.3",
+ "@rollup/rollup-win32-x64-msvc": "4.53.3",
"fsevents": "~2.3.2"
}
},
@@ -2437,45 +2124,12 @@
"node": ">=10"
}
},
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/siginfo": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
"dev": true
},
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -2492,129 +2146,12 @@
"dev": true
},
"node_modules/std-env": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
- "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
+ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
"dev": true,
"license": "MIT"
},
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-literal": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
- "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^9.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2627,21 +2164,6 @@
"node": ">=8"
}
},
- "node_modules/test-exclude": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
- "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^10.4.1",
- "minimatch": "^9.0.4"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/tinybench": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
@@ -2657,14 +2179,14 @@
"license": "MIT"
},
"node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
},
"engines": {
"node": ">=12.0.0"
@@ -2673,30 +2195,10 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "node_modules/tinypool": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
- "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- }
- },
"node_modules/tinyrainbow": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
- "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tinyspy": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz",
- "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz",
+ "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2728,9 +2230,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"dev": true,
"license": "MIT"
},
@@ -2839,25 +2341,24 @@
}
},
"node_modules/vite": {
- "version": "6.3.6",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz",
- "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==",
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz",
+ "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -2866,14 +2367,14 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@types/node": "^20.19.0 || >=22.12.0",
"jiti": ">=1.21.0",
- "less": "*",
+ "less": "^4.0.0",
"lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
"terser": "^5.16.0",
"tsx": "^4.8.1",
"yaml": "^2.4.2"
@@ -2915,75 +2416,75 @@
}
},
"node_modules/vite-node": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
- "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-5.2.0.tgz",
+ "integrity": "sha512-7UT39YxUukIA97zWPXUGb0SGSiLexEGlavMwU3HDE6+d/HJhKLjLqu4eX2qv6SQiocdhKLRcusroDwXHQ6CnRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"cac": "^6.7.14",
- "debug": "^4.4.1",
"es-module-lexer": "^1.7.0",
+ "obug": "^2.0.0",
"pathe": "^2.0.3",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ "vite": "^7.2.2"
},
"bin": {
- "vite-node": "vite-node.mjs"
+ "vite-node": "dist/cli.mjs"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
- "url": "https://opencollective.com/vitest"
+ "url": "https://opencollective.com/antfu"
}
},
"node_modules/vitest": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
- "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.13.tgz",
+ "integrity": "sha512-QSD4I0fN6uZQfftryIXuqvqgBxTvJ3ZNkF6RWECd82YGAYAfhcppBLFXzXJHQAAhVFyYEuFTrq6h0hQqjB7jIQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.4",
- "@vitest/mocker": "3.2.4",
- "@vitest/pretty-format": "^3.2.4",
- "@vitest/runner": "3.2.4",
- "@vitest/snapshot": "3.2.4",
- "@vitest/spy": "3.2.4",
- "@vitest/utils": "3.2.4",
- "chai": "^5.2.0",
- "debug": "^4.4.1",
- "expect-type": "^1.2.1",
- "magic-string": "^0.30.17",
+ "@vitest/expect": "4.0.13",
+ "@vitest/mocker": "4.0.13",
+ "@vitest/pretty-format": "4.0.13",
+ "@vitest/runner": "4.0.13",
+ "@vitest/snapshot": "4.0.13",
+ "@vitest/spy": "4.0.13",
+ "@vitest/utils": "4.0.13",
+ "debug": "^4.4.3",
+ "es-module-lexer": "^1.7.0",
+ "expect-type": "^1.2.2",
+ "magic-string": "^0.30.21",
"pathe": "^2.0.3",
- "picomatch": "^4.0.2",
- "std-env": "^3.9.0",
+ "picomatch": "^4.0.3",
+ "std-env": "^3.10.0",
"tinybench": "^2.9.0",
"tinyexec": "^0.3.2",
- "tinyglobby": "^0.2.14",
- "tinypool": "^1.1.1",
- "tinyrainbow": "^2.0.0",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
- "vite-node": "3.2.4",
+ "tinyglobby": "^0.2.15",
+ "tinyrainbow": "^3.0.3",
+ "vite": "^6.0.0 || ^7.0.0",
"why-is-node-running": "^2.3.0"
},
"bin": {
"vitest": "vitest.mjs"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"@edge-runtime/vm": "*",
+ "@opentelemetry/api": "^1.9.0",
"@types/debug": "^4.1.12",
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.4",
- "@vitest/ui": "3.2.4",
+ "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
+ "@vitest/browser-playwright": "4.0.13",
+ "@vitest/browser-preview": "4.0.13",
+ "@vitest/browser-webdriverio": "4.0.13",
+ "@vitest/ui": "4.0.13",
"happy-dom": "*",
"jsdom": "*"
},
@@ -2991,13 +2492,22 @@
"@edge-runtime/vm": {
"optional": true
},
+ "@opentelemetry/api": {
+ "optional": true
+ },
"@types/debug": {
"optional": true
},
"@types/node": {
"optional": true
},
- "@vitest/browser": {
+ "@vitest/browser-playwright": {
+ "optional": true
+ },
+ "@vitest/browser-preview": {
+ "optional": true
+ },
+ "@vitest/browser-webdriverio": {
"optional": true
},
"@vitest/ui": {
@@ -3011,21 +2521,6 @@
}
}
},
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/why-is-node-running": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
@@ -3043,104 +2538,6 @@
"node": ">=8"
}
},
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
diff --git a/scripts/changelog-checker/package.json b/scripts/changelog-checker/package.json
index 30eb1db8ff..8cc94d0532 100644
--- a/scripts/changelog-checker/package.json
+++ b/scripts/changelog-checker/package.json
@@ -10,15 +10,15 @@
},
"devDependencies": {
"@types/mdast": "4.0.4",
- "@types/node": "22.18.10",
- "@vitest/coverage-v8": "3.2.4",
+ "@types/node": "24.10.1",
+ "@vitest/coverage-v8": "4.0.13",
"mdast-util-to-string": "4.0.0",
"remark": "15.0.1",
"remark-parse": "11.0.0",
"typescript": "5.9.3",
"unified": "11.0.5",
- "vite": "6.3.6",
- "vite-node": "3.2.4",
- "vitest": "3.2.4"
+ "vite": "7.2.4",
+ "vite-node": "5.2.0",
+ "vitest": "4.0.13"
}
}
diff --git a/scripts/clean-all.js b/scripts/clean-all.js
index 5a8f9eba23..839ea3ba1c 100644
--- a/scripts/clean-all.js
+++ b/scripts/clean-all.js
@@ -24,6 +24,9 @@ const fs = require('fs');
fs.rmSync(__dirname + '/../packages/sw/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/sw/node_modules', { recursive: true, force: true });
+ fs.rmSync(__dirname + '/../packages/i18n/built', { recursive: true, force: true });
+ fs.rmSync(__dirname + '/../packages/i18n/node_modules', { recursive: true, force: true });
+
fs.rmSync(__dirname + '/../packages/misskey-js/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/misskey-js/node_modules', { recursive: true, force: true });
diff --git a/scripts/clean.js b/scripts/clean.js
index 69a8df76af..5cce8bacab 100644
--- a/scripts/clean.js
+++ b/scripts/clean.js
@@ -11,6 +11,7 @@ const fs = require('fs');
fs.rmSync(__dirname + '/../packages/frontend/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/frontend-embed/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/icons-subsetter/built', { recursive: true, force: true });
+ fs.rmSync(__dirname + '/../packages/i18n/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/sw/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/misskey-js/built', { recursive: true, force: true });
fs.rmSync(__dirname + '/../packages/misskey-reversi/built', { recursive: true, force: true });
diff --git a/scripts/dev.mjs b/scripts/dev.mjs
index e500510b9e..b54004132a 100644
--- a/scripts/dev.mjs
+++ b/scripts/dev.mjs
@@ -16,6 +16,13 @@ await execa('pnpm', ['clean'], {
stderr: process.stderr,
});
+// アセットのビルドで依存しているので一番最初に必要
+await execa('pnpm', ['--filter', 'i18n', 'build'], {
+ cwd: _dirname + '/../',
+ stdout: process.stdout,
+ stderr: process.stderr,
+});
+
await Promise.all([
execa('pnpm', ['build-pre'], {
cwd: _dirname + '/../',
@@ -38,6 +45,11 @@ await Promise.all([
stdout: process.stdout,
stderr: process.stderr,
}),
+ execa('pnpm', ['--filter', 'misskey-js', 'build'], {
+ cwd: _dirname + '/../',
+ stdout: process.stdout,
+ stderr: process.stderr,
+ }),
]);
execa('pnpm', ['build-pre', '--watch'], {
@@ -88,6 +100,12 @@ execa('pnpm', ['--filter', 'misskey-js', 'watch', '--no-clean'], {
stderr: process.stderr,
});
+execa('pnpm', ['--filter', 'i18n', 'watch', '--no-clean'], {
+ cwd: _dirname + '/../',
+ stdout: process.stdout,
+ stderr: process.stderr,
+});
+
execa('pnpm', ['--filter', 'misskey-reversi', 'watch', '--no-clean'], {
cwd: _dirname + '/../',
stdout: process.stdout,